使用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); 
} 
+1

应该是=的malloc,降* – sp2danny 2014-10-17 17:39:00

+0

1.做一点压痕。 2.打开编译器警告。 - 行'* a = malloc(n * sizeof(int));'不正确。 3.检查'scanf'函数的返回值 – 2014-10-17 17:39:09

您正在将由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是指针变量应该指向的地址。因为*和指针一起用于解引用。

+0

你的回答是正确的,你可以向OP解释为什么? – ryyker 2014-10-17 17:43:58

+0

@ryyker:增加了信息:) – user1336087 2014-10-17 18:11:35

+0

我发表了你的评论。好的回答 – ryyker 2014-10-17 18:25:22

请启用编译器警告;东西应该在你被尖叫:

*a=malloc(n*sizeof(int)); 

这是说:

  1. 分配一些内存。
  2. 将该地址分配给由a(未初始化并指向任何已知位置)指向的整数。

a本身仍然指向无处。

然后:

a[i]=i; 

写入该随机空间。

你想说:

a = malloc(n * sizeof(int));