我一直在尝试为结构动态分配内存。我继续得到seg故障,我不知道为什么。我将代码缩减为练习程序,试图弄清楚什么是错误的。此代码正确编译,没有错误:
#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语句时,它运行得很完美,并给我正确的答案。所以我不确定会出现什么问题。
答案 0 :(得分:2)
以下行有两个问题:
if((person **)malloc(size*sizeof(person))==NULL);
Issue1:
内存泄漏
Issue2:
在;
条件结束时if
。
要解决这些问题,请使用:
person **new=(person **)malloc(size*sizeof(person *));
if(NULL == new)
{
printf("There was a problem\n");
exit(1);
}
同样如 francis 所述,您需要更改new[x]
malloc声明:
new[x]=(person *)malloc(sizeof(person *));
要强>
new[x]=(person *)malloc(sizeof(person));