以下code在ideone中正常工作,但它在代碼塊IDE中給出運行時錯誤。我的IDE壞了,還是有任何編程語言特定的問題。將一個int放在int指針中會給C中的運行時錯誤。
#include<stdio.h>
int main(){
int *pointer;
int num = 45;
*pointer = num;
printf("pointer points to value %d", *pointer);
return 0;
}
以下code在ideone中正常工作,但它在代碼塊IDE中給出運行時錯誤。我的IDE壞了,還是有任何編程語言特定的問題。將一個int放在int指針中會給C中的運行時錯誤。
#include<stdio.h>
int main(){
int *pointer;
int num = 45;
*pointer = num;
printf("pointer points to value %d", *pointer);
return 0;
}
替換此
*pointer = num;
通過
pointer = #
你的指針應指向一個內存空間的價值給它分配之前。
當你以這種方式定義指針:
int *pointer;
這MEAS您已經定義指針,但指針沒有指向的內存空間。如果直接使用指針而不指向內存空間(就像您在代碼中所做的那樣),那麼您將得到未定義的行爲。
指向指針å存儲空間可以通過下列方式之一來進行:指向靜態存儲器
int num;
int *pointer = #
NUM
1)是定義作爲靜態的int。因此,指針可指向指向動態存儲器
int *pointer = malloc(sizeof(int));
指針可以指向一個動態存儲器的Num存儲器
2)。動態內存可以與malloc()
一起分配,當內存變得無用時,我們可以釋放內存free(pointer)
由於'static'是一個存儲類說明符,'num'具有自動存儲,所以區分動態和靜態內存有點不幸。不過,我不確定如何更好地表達它。 –
首先,你已經通過「int * pointer」定義了一個指針。
然後,您嘗試使用「* pointer = num」來實現間接訪問 - 將num的值分配給指針「指針」指向的內存空間。
好的,這是問題!從你的代碼中,你只定義了一個指針,但是你沒有將它指向一個內存空間。間接訪問而不這樣做是非常危險的。所以,你會看到運行時錯誤。
現在,您應該添加「int值;指針= &value;」您的代碼。它會使指針「指針」指向「值」。你可以通過間接訪問「* pointer = num」將「num」分配給「value」。
在我看來,你應該在學習指針時區分定義和間接訪問。
我是一個英語不好的人。這是我在堆棧溢出中的第一個答案。我希望我的回答能幫助你。謝謝。
'pointer'是一個未初始化的指針;你還沒有分配任何內存。 –
不要忘記'printf'格式字符串末尾的'\ n'。 –
@JensGustedt我應該總是在格式化字符串的末尾使用\ n(我是一個初學者,在C語言中編程經驗很少) –