Чтобы обеспечить функциональную целостность структуры данных, которую я реализовал, я написал тестовый файл, используя mcheck
, чтобы убедиться, что я работаю в пределах выделенной памяти. Однако, пытаясь использовать mprobe()
в строковом литерале (и вызывая mcheck(NULL)
в начале), программа всегда прерывается с MCHECK_HEAD
.
Я пробовал это с самой маленькой программой, которую я могу представить:
#include <mcheck.h>
#include <stdio.h>
int main()
{
mcheck(NULL);
mprobe("test");
exit(0);
}
В результате получается следующее:
$ gcc test.c -lmcheck
$ ./a.out
memory clobbered before allocated block
Aborted (core dumped)
Таким образом, кажется, что mcheck завершается сбоем всякий раз, когда сталкивается со строковым литералом, думая, что предыдущая память была изменена. Почему? Это потому, что строка явно не malloc
ed?