簡體   English   中英

為什么它不給出分段錯誤?

[英]Why is it not giving segmentation fault?

我有一個關於使用指針的問題。

 char *CustomString; char str[5] = {'V', 'i', 'c', 't', '\0'}; CustomString = (char*) malloc(1); strcpy(CustomString, str); printf("%s\n", CustomString);

為什么不給出“分段錯誤”?

結果是 output:

 Vict

當您寫入超出分配的 memory 的范圍時,您會觸發未定義的行為 這意味着編譯器不保證程序會做什么。 它可能會崩潰,它可能會出現 output 奇怪的結果,或者它可能看起來工作正常。

僅僅因為程序可能崩潰並不意味着它會。

為了最直接地回答您的問題,在分配 memory 時,大多數編譯器的 memory 管理方案會將分配邊界調整為某個固定數量,通常為 16 字節或 64 字節。 因此,當您分配一個字節時,您實際上可能獲得了超過 1 個字節。 但這是幕后行為,編寫任何依賴於這種行為的代碼都是一個非常糟糕的主意。 更改編譯器(甚至升級到同一編譯器的更新版本),所有的地獄都可能會崩潰。 出於某種原因,它被稱為未定義的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM