返回乙個區域性變數的指標造成的錯誤

2021-08-17 09:09:56 字數 618 閱讀 8093

#include

char *p_fun()

;char *p=a;

return p;

}int main(int argc, const char *argv)

int main(int argc, const char *argv)

這樣也是不可以的,因為設a的位址是0x0001,可以找到0x0001,但是0x0001中的內容也已經被改變了。

而如果是

int test(int a,int b)

int sum;

sum=a+b;

return sum;

此時是返回了sum中的值,而sum中的值已經由上一步計算好了放在sum裡了,此時不用通過sum去找a和b,此時也找不到,因為a和b已經被釋放了找不到了,

不同於通過區域性變數的位址去找區域性變數,這裡直接將結果輸出了,沒有利用位址去尋找。所以不管有沒有中間變數,通過區域性變數的位址去找區域性變數,肯定是找不到的,但是區域性變數計算的結果是可以通過return儲存的。

並且注意,在使用乙個指標變數的時候,如果將指標指向的記憶體空間釋放了,但是指標仍然指向這塊空間,如果再次使用這個指標的話,指標裡的內容是任意值,所以需要

將指標進行乙個初始化。p=null

當函式返回乙個區域性變數的指標問題,記憶體是否被釋放

在學習c c 的時候,我遇到了乙個讓我思考良久的問題,當乙個自定義函式返回乙個區域性變數的指標時是否是個野指標呢?對此,我講一下我的理解。按照正常的理解,當乙個函式執行完畢後會使其記憶體釋放,這就產生了乙個問題。當乙個函式裡面有乙個區域性變數時,使乙個指標指向這個變數的空間,最後這個空間被釋放,然後...

返回區域性變數的問題

函式返回區域性變數,是返回區域性變數的值。但指標 或位址 是一種特殊的值,所以返回區域性指標變數需要特別注意。正確情況下,作為函式返回值的區域性指標,其所指向物件的作用域應該是呼叫者作用域 全域性或靜態常量區 指向棧空間物件的指標作為返回值,存在潛在的錯誤。1.返回區域性值變數 函式返回時,將返回a...

返回區域性變數的問題

函式返回區域性變數,是返回區域性變數的值。但指標 或位址 是一種特殊的值,所以返回區域性指標變數需要特別注意。正確情況下,作為函式返回值的區域性指標,其所指向物件的作用域應該是呼叫者作用域 全域性或靜態常量區 指向棧空間物件的指標作為返回值,存在潛在的錯誤。1.返回區域性值變數 int num vo...