c - 错误消息地址的示例程序未堆栈、malloc 或(最近)释放
问题描述
作为学校的练习,我试图找到一个产生 valgrind 错误的程序Address 0x1c is not stack'd, malloc'd or (recently) free'd
。当然,关于这个错误有很多问题,但它们都是完整的程序,对于我的例子来说太大了。
你有什么提示给我这样一个示例程序的外观吗?
感谢您的支持
解决方案
您总是可以明确地欺骗和释放这样的指针:
#include <stdint.h>
#include <stdlib.h>
int
main (void)
{
free ((void *) (uintptr_t) 0x1c);
return 0;
}
一个更现实的例子是一个空指针取消引用,涉及偏移量 28 处的结构成员。像这样:
#include <stddef.h>
struct data
{
int pad[7];
int value;
};
int
main (void)
{
volatile struct data *volatile pointer = NULL;
pointer->value = 0;
return 0;
}
(volatile
需要关键字来防止编译器识别空指针尊重死存储,并相应地优化事物。)