c 中關於記憶體的一些問題

2021-05-22 01:42:07 字數 680 閱讀 2854

void getmemory(char *p)

void test(void)

請問執行test函式會有什麼樣的結果?

答:程式崩潰。因為getmemory並不能傳遞動態記憶體,test函式中的str一直都是null。strcpy(str,"helloworld");將使程式崩潰。

解析:該函式中的p是乙個臨時的指標變數,與呼叫getmemory函式的實參不是同乙個變數,所以無法返回申請的記憶體。可以做如下改進 void getmemory(char* &p);

char *getmemory(void)

void test(void)

請問執行test函式會有什麼樣的結果?

答:可能是亂碼。因為getmemory返回的是指向「棧記憶體」的指標,該指標的位址不是null,但其原先的內容已經被清除,新內容不可知。

解析:p是區域性變數,在離開作用域後棧空間會被**,結果不可預料。

void getmemory2(char **p, int num)

void test(void)

請問執行test函式會有什麼樣的結果?

答:(1)能夠輸出hello(2)記憶體洩漏

解析:p是指向傳入的指標的指標,*p為傳入的指標賦值,所以改變了傳入指標的值,也可以寫成這樣:

void getmemory(char *&p)

效果一樣

關於c 中記憶體對齊的一些問題

假設有以下 include include class a class b int main 原始碼檔案為test.cpp,在64位機器上編譯執行 g test.cpp o test test int是4個位元組,short2個位元組,char1個位元組,理論上a因該是4 2 2 1 11個位元組啊...

關於記憶體溢位的一些問題

不知道是否理解正確,還請高手多加指點,這是我今天再修改程式的時候碰到的一些問題,在我修改的軟體當中正是通過類似 sum函 數的指標返回值,程式編譯沒有錯誤,在我反覆試驗軟體的功能時候出現了指標錯誤,後來修改了函式,讓其不通過指標返回值,這才得以不出現指標錯誤,但在內 存溢位檢測過程中,發現軟體當中的...

C中關於陣列的一些問題

int arr 4 這裡的4必須是乙個常量常量定義方式有 1.巨集定義 define size 4 此時可以使用為 int arr size 2.列舉 enum size 3.const修飾 const int size 4 此時的const修飾的常量不可以用作陣列的常量表示式!這是因為c語言本身並...