Valgrind报告无效的Realloc
我试图充实我的C内存管理知识。我来自一个脚本和管理的后台,我想了解更多关于C和C++的知识。为此,我读了几本书,其中包括一本使用Valgrind报告无效的Realloc,c,valgrind,realloc,C,Valgrind,Realloc,我试图充实我的C内存管理知识。我来自一个脚本和管理的后台,我想了解更多关于C和C++的知识。为此,我读了几本书,其中包括一本使用realloc修剪一串空白的例子: #include <stdio.h> #include <stdlib.h> #include <string.h> char* trim(char* phrase) { char* old = phrase; char* new = phrase; while(*old == '
realloc
修剪一串空白的例子:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* trim(char* phrase)
{
char* old = phrase;
char* new = phrase;
while(*old == ' ') {
old++;
}
while(*old) {
*(new++) = *(old++);
}
*new = 0;
return (char*)realloc(phrase, strlen(phrase)+1);
}
int main ()
{
char* buffer = (char*)malloc(strlen(" cat")+1);
strcpy(buffer, " cat");
printf("%s\n", trim(buffer));
free(buffer);
buffer=NULL;
return 0;
}
请帮助我理解为什么它被认为是无效的重新分配。这个例子是废话吗?有什么我遗漏的吗?我知道,根据规范,realloc希望指针以前是由malloc创建的,这是因为realloc在另一个函数中吗?或者valgrind感到困惑是因为它们在不同的功能中?我不是一个十足的白痴(大多数时候),但现在我觉得自己是一个没有看到问题的白痴
提前谢谢 您试图
释放
原始指针,而不是realloc
d指针。您可以通过以下方式进行修复:
buffer = trim(buffer)
您试图
释放
原始指针,而不是realloc
d指针。您可以通过以下方式进行修复:
buffer = trim(buffer)
就在那里。看,暂时失明。我以为这一定是我在做的事情,但我就是没看到。令人惊叹的。非常感谢!就在那里。看,暂时失明。我以为这一定是我在做的事情,但我就是没看到。令人惊叹的。非常感谢!