gpt4 book ai didi

c - malloc 和 realloc 段错误

转载 作者:太空宇宙 更新时间:2023-11-04 00:37:04 24 4
gpt4 key购买 nike

我在 linux 上工作并使用 gcc 编译器。我对函数 malloc 和 realloc 进行了一些体验,试图了解它是如何工作的。但是当我执行程序时给我段错误。接下来我的代码:

#include<stdio.h>
#include<stdlib.h>

int main(){
register int cont=1;
int i,n,*a;
a=(int*)malloc(sizeof(int));
scanf("%d",&n);
while(n!=0){
if(a!=NULL)
a=(int*)realloc(a,cont*sizeof(int));
else
goto exit;
a[i]=n;
scanf("%d",&n);
cont++;
i++;
}

for(i=0;i<cont;i++)
printf("%d\n",a[i]);
free(a);
return 0;

exit: printf("No memory\n");
free(a);
return -1;



}

为什么这不起作用,我的代码有什么问题?

最佳答案

i 从未初始化,因此 a[i]=n; 可能会导致段错误。将其更改为:

int i = 0;

可以对您的代码进行一些其他改进,例如 don't cast the result of malloc ,在我看来,您对 goto 的使用看起来没有必要,并且 register 关键字可能没用。

关于c - malloc 和 realloc 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28039472/

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