我的malloc电话有问题。我有以下代码:
int** parseEntireFile(int *sizeArray)
{
FILE * fp;
char buffer[5000];
int size = 0;
int a,b,c;
int res;
int **someArray;
fp = fopen("input.txt","r");
while (fgets(buffer,sizeof(buffer),fp)!= NULL)
{
size++;
}
fclose(fp);
fp = fopen("input.txt","r");
someArray = malloc(sizeof(int) * size);
size = 0;
while(fgets(buffer, sizeof(buffer), fp) != NULL) {
res = sscanf(buffer, "%d%d%d", &a, &b, &c);
if (res == 3)
{
someArray[size] = malloc(sizeof(int*) * 500);
someArray[size][0] = a;
someArray[size][1] = b;
someArray[size][2] = c;
}else if (res == 2) {
someArray[size] = malloc(sizeof(int*) * 500);
someArray[size][0] = a;
someArray[size][1] = b;
someArray[size][2] = 0;
} else if (res == 1) {
printf ("1 value %d\n", a);
} else
{
printf ("0 values\n");
}
size++;
}
*sizeArray = size;
return someArray;
}
所有这一切都很好,但在我的主要部分我声明了一个struct指针数组和malloc它:
struct allData **certainData;
certainData = malloc(sizeof(struct allData) * size);
当我将这段代码添加到我的程序中时,程序的其余部分会打印错误的值,但是当我把malloc取出它的罚款时。有人知道问题出在哪里吗?
答案 0 :(得分:1)
someArray = malloc(sizeof(int) * size);
应该是
someArray = malloc(sizeof(int*) * size);
可能你的平台有sizeof(int *)!= sizeof(int)。
答案 1 :(得分:-1)
someArray = malloc(sizeof(int) * size);
不应该编译。 malloc应该返回void*
,所以你应该抛出它。
另外,就像评论所说的那样,应该分配一个指针数组。
如果指针大于整数,就像典型的64位构建一样,那么你将超越someArray
并写入堆栈中的其他内容。所以你应该期待错误的值,certainData
被粉碎等等。