首页 > 解决方案 > 错误消息地址的示例程序未堆栈、malloc 或(最近)释放

问题描述

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

你有什么提示给我这样一个示例程序的外观吗?

感谢您的支持

标签: cmallocvalgrind

解决方案


您总是可以明确地欺骗和释放这样的指针:

#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需要关键字来防止编译器识别空指针尊重死存储,并相应地优化事物。)


推荐阅读