malloc函式引起的意外錯誤

2021-08-26 21:44:11 字數 737 閱讀 2004

在實現乙個簡單的字元對應函式的過程中發現了這個不算是bug的錯誤:

這個錯誤出現的前提是這樣的:

main函式如下:

int main(int argc, char **argv)

getnodename函式:

char *getnodename(int num)

printf("\n\nout of the switch:%s\n\n",nodename);

return nodename;

}

getaliasval函式

char *getaliasval(char *aliasval, int num)

else

printf("\n\nresult:\n%s\n\n",aliasval);

return aliasval;

}

錯誤產生在main函式的第9行那段,

該段**不能正確產生輸出,而前一句(第6行)是可以正確輸出的,具有可重複性。

在getnodename中nodename也都能正確輸出。

起初是懷疑nodename指標出的問題,

但是用gdb進行簡單的除錯之後,發現nodename指標並沒有錯誤。

於是定位到malloc()函式這裡,

因為malloc()函式之前可以正確輸出,而malloc()之後就亂了,而且每次執行的結果都不一樣。(指標的位址每次不一樣。)

做完畢業設計先……

LOCAL LISTENER 引起的錯誤

local listener l2 啟動例項的時候 會先到 tnsnames.ora 檔案裡取查詢定義名為l2的tns服務名.例項起來後會嘗試把資料庫服務註冊到address指定位址。而這個位址就是你自己定義的listener所監聽的位址,這樣oracle例項就會把資料庫服務自動註冊到非預設的 了。...

malloc函式 new和malloc的區別

1 申請的記憶體所在位置 new操作符從自由儲存區上為物件動態分配記憶體空間,而malloc函式從堆上動態分配記憶體。自由儲存區是c 基於new操作符的乙個抽象概念,凡是通過new操作符進行記憶體申請,該記憶體即為自由儲存區。而堆是作業系統中的術語,是作業系統所維護的一塊特殊記憶體,用於程式的記憶體...

malloc函式的問題

首先我們看看以下 include include include define size 0x40000 十六進製制的表示方法,等於十進位制262 144,你們要習慣用十六進製制,因為兩個十六進製制剛好是乙個位元組 int main 就是以上 你們使用vc和turbo c 分別編譯,看生成檔案的大小...