如何处理在C/C++中返回的动态内存的指针

akr*_*roy 4 c c++ memory-management return

我想知道处理内存泄漏的协议,指向动态内存的指针是在C和C++中返回的.例如,strtok返回char*.据推测,最终返回的指针必须被释放/删除.我注意到参考页面甚至没有提到这一点.这是因为这是假设吗?另外,您如何知道是删除还是免费?是否需要进行研究以找出每个函数最初所使用的语言,然后假设所有C程序都使用malloc/free而C++使用new/delete?

ATa*_*lor 7

strtok不会返回指向新分配的内存的指针,而是返回先前已分配的内存位置的指针.

我们假设这个:

char String[1024];
strcpy(String, "This is a string");
char *Ptr = strtok(String, " ");
Run Code Online (Sandbox Code Playgroud)

Ptr不会指向新分配的内存位置,而是指向String的位置(如果我的计数现在没有让我失败),空格将被'\ 0'替换.(

从引用开始:令牌的这一端由函数自动替换为空字符,并且函数返回令牌的开头.

这也意味着,如果你在strtok完成其工作后再次打印出'String',它将只包含'This',因为字符串在此之后终止.

根据经验,您可以安全地说,您只需要释放/删除您自己明确分配的内存.

这意味着:

对于每个'新'放一个'删除',并为每个'malloc'放一个'免费',你就是好的.

  • 为了扩展这一点,库函数需要你释放内存,他们会在他们的文档中告诉你,他们是C或C++函数是否需要`delete`或`free`的关键. (2认同)