作为学校的一种做法,我试图找到一个产生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
关键字来防止编译器识别死存储的空指针,并相应地优化事物。)