首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么机制可以检测对未分配内存的访问?

什么机制可以检测对未分配内存的访问?
EN

Stack Overflow用户
提问于 2011-12-10 05:50:22
回答 2查看 113关注 0票数 4

有时,我会遇到如下所示的off-by-one错误:

代码语言:javascript
复制
unsigned int* x = calloc(2000, sizeof(unsigned int));

printf("%d", x[2000]);

我已经超出了分配区域的末尾,所以我在运行时得到了一个EXC_BAD_ACCESS信号。我的问题是:如何检测到这一点?这似乎只是默默地返回垃圾,因为我只差了一个字节,而不是,比方说,一整页。系统的哪个部分阻止我只返回x + 2000中的垃圾字节

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-10 05:57:02

内存系统在其内存字段的开头和结尾都有标记值,超出了分配的字节数。当您释放内存时,它会检查这些值是否完好无损。如果不是,它会告诉你。

票数 1
EN

Stack Overflow用户

发布于 2011-12-10 06:24:16

也许您只是幸运,因为您使用2000作为大小。根据int的大小,总大小可以被3264整除,因此很有可能它的末尾会真正终止“真正”的分配。尝试使用一些奇数个字节(最好使用char数组),看看您的系统是否仍能检测到它。

在任何情况下,您都不应该依赖于以这种方式找到这些bug。总是使用valgrind或类似的来检查你的内存访问。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8452140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档