值傳遞問題 GetMemory

2021-09-26 06:45:24 字數 732 閱讀 6514

指標的錯誤使用往往造成意想不到的錯誤,導致程式崩潰、陣列越界、野指標的產生,一般都是因為:

(1)野指標的使用,不使用了未置空;

(2)動態記憶體申請未釋放;

(3)指標的值傳遞導致訪問出錯;

(4)malloc申請記憶體後未進行出錯檢查;

(5)變數的生存週期;

例題1.

void getmemory( char *p )

void test( void )

首先分析一下例題1的錯誤,如下圖:

針對這個問題有兩種改進方法:

(1)二級指標:

void getmemory( char **p )

void test( void )

char* getmemory()

void test( void )

例題2:

char *getmemory( void )

void test( void )

陣列p儲存的是乙個字串常量,屬於區域性作用於,會隨著棧錚的銷毀而消亡,str接收到的位址是真實的但是指向的記憶體塊是未知的,造成非法訪問的問題。

值傳遞和引用傳遞的問題

先看看下面這段 的輸出結果 public class example public static void main string args public void change string str,char ch 結果是 tarena and gbc 解釋 1.為什麼string字串的值是不可變...

幾個關於GetMemory的經典問題

test1 void getmemory1 char p void test1 void 呼叫getmemory str 後,str並未產生變化,依然是null。改變的只是str的乙個拷貝的記憶體的變化 strcpy str,hello world 程式執行到這將產生錯誤。test2 char ge...

值傳遞 位址傳遞

在呼叫乙個有引數的過程時,首先進行的是形式引數與實在引數的結合,實現呼叫過程的實在引數與被呼叫過程的形式引數之間的資料傳遞。資料傳遞方式有兩種方式 按值傳遞與按位址傳遞。1.按值傳遞引數 按值傳遞引數時,是將實在引數的值複製乙個形式引數中,如果在呼叫過程中改變了形式引數的值,不會影響實在引數本身,即...