malloc和realloc分段错误

war*_*cat 1 c pointers memory-management

我正在使用linux并使用compiller 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;



}
Run Code Online (Sandbox Code Playgroud)

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

Yu *_*Hao 7

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

int i = 0;
Run Code Online (Sandbox Code Playgroud)

可以对你的代码做一些其他的改进,例如,不要投射结果malloc,你的使用goto在我看来看起来不太必要,register关键字可能没用.