错误消息地址的示例程序未堆栈,未分配或(最近)释放

时间:2019-03-30 11:53:24

标签: c malloc valgrind

作为一种学校实践,我试图找到一个产生valgrind错误Address 0x1c is not stack'd, malloc'd or (recently) free'd的程序。当然,有关此错误的问题很多,但所有问题都是完整的程序,对于我的示例来说太大了。

您有没有给我的提示,例如这样的示例程序是什么样子?

感谢您的支持

1 个答案:

答案 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关键字来防止编译器识别空指针引用死存储,并相应地对其进行优化。)