作为一种学校实践,我试图找到一个产生valgrind错误Address 0x1c is not stack'd, malloc'd or (recently) free'd
的程序。当然,有关此错误的问题很多,但所有问题都是完整的程序,对于我的示例来说太大了。
您有没有给我的提示,例如这样的示例程序是什么样子?
感谢您的支持
答案 0 :(得分:1)
您始终可以明确地欺骗和释放此类指针:
#include <stdint.h>
#include <stdlib.h>
int
main (void)
{
free ((void *) (uintptr_t) 0x1c);
return 0;
}
一个稍微现实一些的示例是在偏移量28处涉及到一个struct成员的空指针取消引用。
#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
关键字来防止编译器识别空指针引用死存储,并相应地对其进行优化。)