[英]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.