Пример программы для адреса сообщения об ошибке не является stack'd, malloc'd или (недавно) free'd - PullRequest
2 голосов
/ 30 марта 2019

как практика для школы Я пытаюсь найти программу, которая выдает ошибку valgrind Address 0x1c is not stack'd, malloc'd or (recently) free'd.Конечно, есть много вопросов относительно этой ошибки, но все они являются полными программами, которые слишком велики для моего примера.

У вас есть совет для меня, как может выглядеть такая программа-пример?

Спасибо за вашу поддержку

1 Ответ

1 голос
/ 30 марта 2019

Вы всегда можете явно обмануть и освободить такой указатель:

#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 необходимы, чтобы компилятор не распознавал нулевой указатель, не обращался к мертвому хранилищу и не оптимизировал его соответственно.)

...