我的malloc调用有问题。我有以下代码:Malloc更改C中的值
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;
}
所有这一切工作正常,但在我的主,我宣布结构指针数组和malloc的那样:
struct allData **certainData;
certainData = malloc(sizeof(struct allData) * size);
当我这段代码添加到我的节目休息的程序打印的是错误的值,但是当我把malloc拿出来的时候就好了。有人知道问题出在哪里吗?
'someArray'是一个int *数组,指向int的指针。因此,你应该分配'size * sizeof(int *)'; 'size * sizeof(int)'可能太小了。相反,您对'someArray [i]'的分配应基于sizeof(int)'。 (一个好的模式是做类似'p = malloc(n * sizeof(* p))'的东西,其中正确的类型是从'p'指向的东西派生的。) –