gpt4 book ai didi

c - Malloc 二维数组始终为 NULL

转载 作者:太空宇宙 更新时间:2023-11-04 08:36:33 31 4
gpt4 key购买 nike

我一直在尝试为结构动态分配内存。我不断遇到段错误,我不确定为什么。我将代码缩减为一个练习程序,试图找出问题所在。此代码编译正确,没有错误:

#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;
}

但是每当我尝试运行该程序时,它总是会触发检查 NULL 并退出的 if 语句。每当我取出 if 语句时,它都会完美运行并给出正确答案。所以我不太确定出了什么问题。

最佳答案

下一行有两个问题:

if((person **)malloc(size*sizeof(person))==NULL);

问题 1:内存泄漏

问题 2: ;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)); 

关于c - Malloc 二维数组始终为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26001201/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com