У меня есть простая программа на C, которая имеет указатель на массив символов. Чтобы начать его, я использую malloc
, а затем измените его размер, а затем установите его несколько раз позже в программе.gdb дает ошибку, но программа работает нормально
Когда я изменить его один раз realloc
, GDB не показывает каких-либо ошибок, однако, при попытке вызова функции изменения размера снова, GDB показывает следующее сообщение об ошибке:
warning: Invalid Address specified to RtlReAllocateHeap(003E0000, 00404076)
Любые идеи почему изменение размера более чем один раз дает эту ошибку?
EDIT
Я играл с ним, и, кажется, ошибка не происходит, когда я закомментируйте настройки данных указателя, который после изменения размера.
void setName(struct class_x *class, char *name)
{
class->name = (char *) reallocateMemory(class->name, sizeof(char) * strlen(name) + 1);
class->name = name;
}
void *reallocateMemory(void *member, size_t size)
{
void *tmp = realloc(member, size);
if(tmp == NULL)
{
//handle
}
return tmp;
}
Как выглядит код, вызывающий realloc? – sth
Вы проверяете ошибку после realloc? –
Это не ошибка, это предупреждение – tur1ng