错误消息地址的示例程序未堆叠,malloc'd或(最近)免费

问题描述 投票:2回答:1

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

你有这个示例程序的样子吗?

谢谢您的支持

c malloc valgrind
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.