#include <stdio.h>
int main(void)
{
int* a;
*a=20;
printf("%i\n",*a);
return 0;
}
我有上面的代碼。當運行時代碼時,我總是會收到錯誤消息「filename.exe已停止工作」。爲什麼?一個簡單的指針代碼
#include <stdio.h>
int main(void)
{
int* a;
*a=20;
printf("%i\n",*a);
return 0;
}
我有上面的代碼。當運行時代碼時,我總是會收到錯誤消息「filename.exe已停止工作」。爲什麼?一個簡單的指針代碼
您沒有爲要指向的指針分配任何內存。你可以這樣做是這樣的:
int *a = malloc(sizeof(*a));
或像這樣:
int value;
int *a = &value;
如果用malloc
分配,那麼你會想,當你使用完畢後調用free
上的指針。
訪問未初始化的指針會導致未定義的行爲。在你的程序中,它導致了分段錯誤,這是未初始化指針訪問的一個非常普遍的結果。
還將釋放的指針設置爲NULL。 :) –
@ Vivek27呃,爲什麼?不一定要這樣做。 –
我的理解是免費的,'a'現在懸掛的指針可能有一個地址,但沒有指向任何有效的內存位置。所以這是一個很好的做法,將其設置爲NULL –
int* a;
a
的默認值是垃圾,並且指向無效內存,您不能指定給那個。像*a=20;
這樣的賦值在運行時會導致未定義的行爲。 (語法明智的代碼是正確的,所以編譯)你可能會有一段時間也得到seg-fault。
任一操作:
int i;
int *a = &i; // a points to a valid memory that is i
*a = 20;
或使用釋放calloc動態存儲器分配()或的malloc()函數。
int *a = malloc(sizeof(int));
*a = 20;
記住動態分配的內存,我們必須取消分配(免費),明確當我們與完成。
你有wild pointer
,或者使用malloc
int* a = malloc(sizeof(int));
分配內存,或使用堆棧變量
int b = 0;
int *a = &b;
*a=20;
好的,謝謝! –
的問題是在你的任務 * A = 20
你不能像這樣給一個指針變量賦值。
int b = 20; a =&b;
感謝, Santhosh
未初始化的指針。 – cnicutar