使用Malloc创建的访问数组
这有什么问题? 为什么不能使用它?其显示分段错误(核心转储) 我们不能使用a[I]
?使用Malloc创建的访问数组
#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);
}
您正在将由a
指向的内存地址设置为由malloc返回的地址。由于a
尚未初始化,因此您将内存的未定义部分设置为由malloc返回的地址。
*a=malloc(n*sizeof(int));
相反,设定指针本身
a=malloc(n*sizeof(int));
*a = malloc(n * sizeof(int));
应a = malloc (n * sizeof(int));
malloc()
分配的存储和指针返回到第一个字节。
由于a
是指针变量应该指向的地址。因为*
和指针一起用于解引用。
你的回答是正确的,你可以向OP解释为什么? – ryyker 2014-10-17 17:43:58
@ryyker:增加了信息:) – user1336087 2014-10-17 18:11:35
我发表了你的评论。好的回答 – ryyker 2014-10-17 18:25:22
请启用编译器警告;东西应该在你被尖叫:
*a=malloc(n*sizeof(int));
这是说:
- 分配一些内存。
- 将该地址分配给由
a
(未初始化并指向任何已知位置)指向的整数。
a
本身仍然指向无处。
然后:
a[i]=i;
写入该随机空间。
你想说:
a = malloc(n * sizeof(int));
应该是=的malloc,降* – sp2danny 2014-10-17 17:39:00
1.做一点压痕。 2.打开编译器警告。 - 行'* a = malloc(n * sizeof(int));'不正确。 3.检查'scanf'函数的返回值 – 2014-10-17 17:39:09