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