c - uint8_t 数组返回在所有情况下都会导致错误(**、*、&,什么都没有)
问题描述
int8_t** FileToColorMap(char* colorfile, int* colorcount)
{
FILE* fp = fopen (colorfile, "r");
if (fp==NULL)
{
printf("no such file.");
return 0;
}
int r,g,b;
fscanf(fp, "%d", colorcount);
uint8_t* output;
output = (uint8_t *)malloc(*colorcount * sizeof(uint8_t));
for (int i = 0; i < *colorcount;i++) {
if( fscanf(fp, "%d %d %d", &r, &g, &b) != EOF ) {
// int* arr= (int *)malloc(3 * sizeof(int));
// arr[0] = r;
// arr[1] = g;
// arr[2] = b;
int arr[3] = {r,g,b};
output[i] = *arr;
} else
{
freeMap(i+1, &output);
return NULL;
}
}
fclose(fp);
return *output;
}
即使我尝试返回输出、**输出和输出,这也会导致 seg 错误错误或错误 1 或其他错误。
看起来您的帖子主要是代码;请添加更多细节。
解决方案
有很多问题:
- 错误的类型和分配
uint8_t* output;
output = (uint8_t *)malloc(*colorcount * sizeof(uint8_t));
您需要在此处声明指向指针的指针并为非 uint8_t 的指针分配空间
两个数组的类型错误。arr
是自动变量并且在函数范围之外取消引用它是一个 UB
- 许多其他问题
int8_t** FileToColorMap(char* colorfile, int* colorcount)
{
FILE* fp = fopen (colorfile, "r");
if (fp==NULL)
{
printf("no such file.");
return 0;
}
int8_t r,g,b;
if(fscanf(fp, "%d", colorcount) != 1)
{
/* fscanf failed - do something */
}
int8_t **output = malloc(*colorcount * sizeof(*output));
for (int i = 0; i < *colorcount;i++) {
if( fscanf(fp, "%hhx %hhx %hhx", &r, &g, &b) == 3) {
uint8_t *arr = malloc(3 * sizeof(*arr));
arr[0] = r;
arr[1] = g;
arr[2] = b;
output[i] = arr;
} else
{
freeMap(i+1, &output);
return NULL;
}
}
fclose(fp);
return output;
}
如果 malloc,请始终检查结果。我不是为了清楚起见
推荐阅读
- nspersistentcloudkitcontainer - 带有 NSPersistentCloudKitContainer 的“NSAllocateMemoryPages() 失败”
- r - 线性回归预测:没有适用于“预测”的方法应用于“data.Frame”类的对象
- javascript - useState 我做错了什么?
- php - 使用选择准备好的语句获取用户名
- javascript - 当用户未完成表单中的所有字段时如何为 onclick 加载程序创建条件
- gitlab-ci - Gitlab屏蔽变量
- c# - 将值从文本框传递到类
- flutter - 颤振:我想做一行,有两张卡片,一张图片和一个文字,如下图所示
- sql - 从访问表单的文本字段传递开始和结束日期参数
- javascript - Axios 'put' 请求将数组作为空值传递