Malloc 2d数组始终为NULL

时间:2014-09-23 17:29:33

标签: c struct malloc

我一直在尝试为结构动态分配内存。我继续得到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语句时,它运行得很完美,并给我正确的答案。所以我不确定会出现什么问题。

1 个答案:

答案 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));