<分区>
我有一个非常大的代码,包含 malloc、free、loop 等。有时,我需要很长时间才能弄清楚问题出在哪里,因为我在程序的一部分收到错误,但真正导致问题的是什么在代码中是遥远的东西。大多数问题是由我没有注意到的double free引起的。但其中一些在一段时间内运行良好,然后就崩溃了。
因此,请考虑一个大多数情况下都有效的示例:
int main() {
char *x = (char*) malloc(10);
char *y = (char*) malloc(10);
free(x);
free(y);
x = (char*) malloc(10);
free(y); // Am I lucky?
return 0;
}
为什么我在运行第二个 free(y)
时没有收到错误消息?我检查了第二个malloc
之后的x
的指针是否等于先前分配的y
地址。它并不总是有效。有时它会崩溃。
所以,我的问题是:有什么方法可以在尝试执行双重释放时强制执行错误?
谢谢!