访问使用Malloc创建的数组

时间:2014-10-17 17:36:37

标签: c arrays malloc

这有什么问题? 为什么不工作?它显示分段错误(核心转储) 我们不能使用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);
}

3 个答案:

答案 0 :(得分:2)

请启用编译器警告;有些东西应该尖叫着你:

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

这说:

  1. 分配一些记忆。
  2. 将该地址分配给a指向的整数(未初始化并指向无已知位置)。
  3. 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));