Valgrind报告无效的Realloc

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 == '

我试图充实我的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 == ' ') {
    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)

就在那里。看,暂时失明。我以为这一定是我在做的事情,但我就是没看到。令人惊叹的。非常感谢!就在那里。看,暂时失明。我以为这一定是我在做的事情,但我就是没看到。令人惊叹的。非常感谢!