2014-10-17 95 views
0

這有什麼問題? 爲什麼不能使用它?其顯示分段錯誤(核心轉儲) 我們不能使用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

回答

0

您正在將由a指向的內存地址設置爲由malloc返回的地址。由於a尚未初始化,因此您將內存的未定義部分設置爲由malloc返回的地址。

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

相反,設定指針本身

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

*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

2

請啓用編譯器警告;東西應該在你被尖叫:

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

這是說:

  1. 分配一些內存。
  2. 將該地址分配給由a(未初始化並指向任何已知位置)指向的整數。

a本身仍然指向無處。

然後:

a[i]=i; 

寫入該隨機空間。

你想說:

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