在C中,我在编写以下示例时遇到错误:
int *pointer;
int i = 0;
pointer = malloc(10 * sizeof(int));
pointer[i - 1] = 4;
Run Code Online (Sandbox Code Playgroud)
显然i是负面指数pointer.
即使错误的片段内存被更改,为什么只在free(pointer)[稍后在代码中] 触发错误?错误是:double free or corruption (out).
编辑:使用的编译器是 gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
大多数(如果不是所有)内存管理器(例如:malloc)都会在您请求的内存周围分配额外的数据.这个额外的工作是通过将一些自己的数据添加到分配中来帮助内存管理器管理各种分配.当你做了负面索引时,你覆盖了这些额外的数据.它本身并不是无效的内存,因此CPU无法防范它,但是当malloc看到它的数据已被堵塞时,它确实会抱怨.这将发生在free()上.