2013-02-04 49 views
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; 
} 
+3

'pointer'是一個未初始化的指針;你還沒有分配任何內存。 –

+1

不要忘記'printf'格式字符串末尾的'\ n'。 –

+0

@JensGustedt我應該總是在格式化字符串的末尾使用\ n(我是一個初學者,在C語言中編程經驗很少) –

回答

8

替換此

*pointer = num; 

通過

pointer = &num; 

你的指針應指向一個內存空間的價值給它分配之前。

當你以這種方式定義指針:

int *pointer; 

這MEAS您已經定義指針,但指針沒有指向的內存空間。如果直接使用指針而不指向內存空間(就像您在代碼中所做的那樣),那麼您將得到未定義的行爲

指向指針å存儲空間可以通過下列方式之一來進行:指向靜態存儲器

int num; 
int *pointer = &num; 

NUM

1)是定義作爲靜態的int。因此,指針可指向指向動態存儲器

int *pointer = malloc(sizeof(int)); 

指針可以指向一個動態存儲器的Num存儲器

2)。動態內存可以與malloc()一起分配,當內存變得無用時,我們可以釋放內存free(pointer)

+0

由於'static'是一個存儲類說明符,'num'具有自動存儲,所以區分動態和靜態內存有點不幸。不過,我不確定如何更好地表達它。 –

1

將num的地址指定爲指針,因爲指針應該保存地址而不是值。您可以通過指針閱讀更多關於指針變量的here

pointer = &num; 

變化值

*pointer = 11; 
-1

首先,哪個公司想點,然後用它來修改針對性值u應初始化指針.. ...

pointer=&num; 

現在使用指針來更改或訪問其指向的值。

+0

這個答案有什麼不對?&爲什麼選擇不投票? – akp

1

首先,你已經通過「int * pointer」定義了一個指針。

然後,您嘗試使用「* pointer = num」來實現間接訪問 - 將num的值分配給指針「指針」指向的內存空間。

好的,這是問題!從你的代碼中,你只定義了一個指針,但是你沒有將它指向一個內存空間。間接訪問而不這樣做是非常危險的。所以,你會看到運行時錯誤。

現在,您應該添加「int值;指針= &value;」您的代碼。它會使指針「指針」指向「值」。你可以通過間接訪問「* pointer = num」將「num」分配給「value」。

在我看來,你應該在學習指針時區分定義和間接訪問。

我是一個英語不好的人。這是我在堆棧溢出中的第一個答案。我希望我的回答能幫助你。謝謝。

相關問題