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