C - malloc'd memory和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 %dn",ptr,*ptr);
    return 0;
    }

上面的程序运行良好(运行时没有错误)。。。怎样因为我只提供了一个1字节的值1000!!

我是否正在覆盖堆中的下一个内存地址?如果是的话,那么西格夫为什么不在那里呢?

malloc的许多实现都会以一定的"分辨率"进行分配以提高效率。

这意味着,即使您请求一个字节,您也很可能得到16或32。

然而,它不是你可以依赖的东西,因为它是未定义的行为。

未定义的行为意味着任何都可能发生,包括整个事情,尽管代码有问题:-)

使用调试堆,释放内存时肯定会收到崩溃或其他通知(但您没有调用free)。

分段错误是针对页面级访问违规的,内存页面通常约为4k,因此在一些细粒度检查检测到之前,不太可能检测到3字节的溢出,或者因为您用"垃圾"覆盖了一些内存而导致代码崩溃。

相关内容

  • 没有找到相关文章

最新更新