据我所知,从返回类型函数接收到的值必须存储在被调用的地方,否则它是错误的。请解释下面的代码如何正常工作。返回值没有捕获时为什么没有错误?
#include <iostream>
#include <stdlib.h>
#include<assert.h>
//Returns a pointer to the heap memory location which stores the duplicate string
char* StringCopy(char* string)
{
long length=strlen(string) +1;
char *newString;
newString=(char*)malloc(sizeof(char)*length);
assert(newString!=NULL);
strcpy(newString,string);
return(newString);
}
int main(int argc, const char * argv[])
{
char name[30]="Kunal Shrivastava";
StringCopy(name); /* There is no error even when there is no pointer which
stores the returned pointer value from the function
StringCopy */
return 0;
}
我在Xcode中使用C++。
谢谢。
你的假设是错误的。您可能随时丢弃函数的返回值,例如,如果您不关心函数是否成功。在你的情况下,你当然会泄漏内存,但像valgrind这样的工具会告诉你这一点。 – arne
...在C++中,您可以使用智能指针,即使您忽略返回的对象(本例为C++ 11 std :: unique_ptr),也可以确保不泄漏, –