【发布时间】:2016-08-20 05:15:45
【问题描述】:
我在与面试官讨论时遇到了这个问题:
如果我从 malloc 分配了 4 个字节的内存。
int *p = (int*) malloc(4);
现在如果我将指针移动了 4 个字节。
p++;
现在指针指向的内存超出了 malloc 分配的 4 字节内存。假设这块内存有读写权限。
*p=4;
这意味着指针即将超出分配的内存。
现在考虑一个情况,我分配了一些内存,但每当我的指针移出分配的内存并写入该内存时,我想知道但如何通知??
我只有 malloc 并且可以免费使用。
【问题讨论】:
-
C 没有自动边界检查。您必须手动跟踪分配的大小。
-
不清楚。为什么不使用工具来完成工作?
-
你应该向你的面试官指出
int *p = (int *)malloc(4);是写得很糟糕的 C 代码。您应该始终避免在 C 中强制转换 malloc 的返回值。这还假设int在某些可能很常见但肯定不安全的任意平台上是一个 4 字节值。 -
在您提供的情况下,读取和写入绝对是未定义的行为,但很可能是“安全的”,因为底层内存分配例程很少会在一个块中只给您 4 个字节.但是,如果您想被警告,您需要 a) 使用 C 以外的其他东西,b) 使用内存管理库(有很多开销并且)检测超出范围的内存读/写,c) 使用Valgrind 或 Coverity 等动态代码分析工具。
-
@Salman 总的来说,valgrind 是一个非常好的工具,但我不太确定它是否适合您的需要。
标签: c pointers memory-management malloc