这有什么问题?
为什么不工作?它显示分段错误(核心转储)
我们不能使用a[I]
?
#include<stdio.h>
int main()
{
int *a,i,n;
scanf("%d",&n);
*a=malloc(n*sizeof(int));
for(i=0;i<n;i++)
a[i]=i;
free(a);
return(0);
}
答案 0 :(得分:2)
请启用编译器警告;有些东西应该尖叫着你:
*a=malloc(n*sizeof(int));
这说:
a
指向的整数(未初始化并指向无已知位置)。 a
本身仍然没有特别指出。
然后:
a[i]=i;
写入随机空间。
你想说:
a = malloc(n * sizeof(int));
答案 1 :(得分:1)
*a = malloc( n * sizeof(int) );
应为a = malloc ( n * sizeof(int) );
malloc()
分配存储并返回指向第一个字节的指针。
由于a
是指针变量,因此应该指向地址。
在这种情况下*a
不正确的地方,因为*
和指针用于取消引用。
答案 2 :(得分:0)
您正在将a
指向的内存地址设置为malloc返回的地址。由于a
尚未初始化,因此您将内存的未定义部分设置为malloc返回的地址。
*a=malloc(n*sizeof(int));
相反,设置指针本身
a=malloc(n*sizeof(int));