簡體   English   中英

malloc'd內存和sigsegv

[英]malloc'd memory and sigsegv

幫助我理解malloc行為..我的代碼如下::

    int main()
    {   
    int *ptr=NULL;
    ptr=(int *)malloc(1);
    //check for malloc
    *ptr=1000;

    printf("address of ptr is %p and value of ptr is %d\n",ptr,*ptr);
    return 0;
    }

上面的程序工作正常(運行沒有錯誤)......怎么樣? 因為我只用1字節提供了1000的值!!

我是否覆蓋了堆中的下一個內存地址? 如果是的話,為什么不是sigsgev?

malloc許多實現都會以一定的“分辨率”進行分配以提高效率。

這意味着,即使你要求一個字節,你可能已經得到16或32。

但是,由於它是不確定的行為,因此您不能依靠它。

未定義的行為意味着任何事情都可能發生,包括盡管有問題的代碼整個工作:-)

使用調試堆,當你釋放內存時你肯定會遇到崩潰或其他通知(但你沒有免費調用)。

分段錯誤用於頁面級訪問沖突,並且內存頁通常大約為4k,因此在一些細粒度檢查檢測到它或代碼的其他部分崩潰之前,不太可能檢測到超出3個字節的溢出因為你用“垃圾”覆蓋了一些記憶

暫無
暫無

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

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