我一直在尝试为结构动态分配内存。我不断收到seg故障,我不知道为什么。我将代码缩减为练习程序,试图弄清楚什么是错的。此代码没有任何错误正确编译:Malloc 2d数组始终为空
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int id;
}person;
person **new;
int main()
{
int x, size;
printf("How big is this? ");
scanf("%d", &size);
getchar();
if((person **)malloc(size*sizeof(person))==NULL);
{
printf("There was a problem\n");
exit(1);
}
person **new=(person **)malloc(size*sizeof(person **));
for(x=0; x<size ;x++)
{
new[x]=(person *)malloc(sizeof(person *));
new[x]->id=x*5;
}
for(x=0; x<size; x++)
{
printf("%d\t", new[x]->id);
free(new[x]);
}
free(new);
return 0;
}
但每当我尝试运行它始终触发if语句来检查一个NULL并退出该程序。每当我拿出if语句,它就会完美运行并给出正确的答案。所以我不确定发生了什么问题。
删除';'a如果('(** **)malloc(size * sizeof(person))== NULL);' – 2014-09-23 17:31:13
此外,检查'scanf'是否成功,'size'可能是未指定的。 0)。第一个'malloc'调用是内存泄漏(因为每个'malloc'调用的结果都没有分配给任何东西)。检查'new'不是'NULL'。编译器警告可能会帮助我们处理错字。 – mafso 2014-09-23 17:37:00
另外,不要在不存储返回值的情况下使用'malloc',您将无法访问分配的内存。相反,在'malloc'之后检查'new == NULL'。 (在我看来,这也会使整数语法更加整齐。) – 2014-09-23 17:38:30