如果函数将 return 指向 char 数组的指针而我不会使用它怎么办
What if the function would return a pointer to a char array and I would not use it
所以,例如我有这个功能:
char* retCharPtr(void) {
char data[15] {"Data is here"};
return data; }
和
char* retCharPtr1(void) {
char *data = new char[15];
strcat(data, "Data is here");
return data; }
如果std::cout << retCharPtr1();
,请解释数据数组的放置位置,
如果 std::cout << retCharPtr();
怎么办?
而且一般来说,当函数 return 它们的状态 (int
) 并且不存储在任何地方时,变量的值会去哪里。这4个字节在程序完整执行过程中是否被占用?
我需要 return 一个 cout
数组的函数,没有下一次调用 delete
,并且内存泄漏。
当一个函数 return 有一个值时,该值作为局部变量存在于调用者的当前范围内(无论调用者是否使用它),并且当变量超出范围时将被销毁。因此,在您的示例中,returned char*
指针(但不是指向的数据)在 <<
语句之后的 ;
上被销毁。
在retCharPtr()
中,数组存储在函数范围内的自动内存中。当 retCharPtr()
退出时,该内存超出范围并被销毁。因此 retCharPtr()
return 是指向无效内存的 悬空 指针。如果调用者尝试使用该指针读取数据,它将调用 undefined behavior.
在retCharPtr1()
中,数组存储在动态内存中,并且会一直存在,直到显式delete[]
ed 内存。如果调用者不在 returned 指针上调用 delete[]
,retCharPtr1()
分配的内存将被泄漏。
这两种情况的解决方案都是return一个std::string
而不是一个char*
。让编译器和 std::string
为您管理内存。
所以,例如我有这个功能:
char* retCharPtr(void) {
char data[15] {"Data is here"};
return data; }
和
char* retCharPtr1(void) {
char *data = new char[15];
strcat(data, "Data is here");
return data; }
如果std::cout << retCharPtr1();
,请解释数据数组的放置位置,
如果 std::cout << retCharPtr();
怎么办?
而且一般来说,当函数 return 它们的状态 (int
) 并且不存储在任何地方时,变量的值会去哪里。这4个字节在程序完整执行过程中是否被占用?
我需要 return 一个 cout
数组的函数,没有下一次调用 delete
,并且内存泄漏。
当一个函数 return 有一个值时,该值作为局部变量存在于调用者的当前范围内(无论调用者是否使用它),并且当变量超出范围时将被销毁。因此,在您的示例中,returned char*
指针(但不是指向的数据)在 <<
语句之后的 ;
上被销毁。
在retCharPtr()
中,数组存储在函数范围内的自动内存中。当 retCharPtr()
退出时,该内存超出范围并被销毁。因此 retCharPtr()
return 是指向无效内存的 悬空 指针。如果调用者尝试使用该指针读取数据,它将调用 undefined behavior.
在retCharPtr1()
中,数组存储在动态内存中,并且会一直存在,直到显式delete[]
ed 内存。如果调用者不在 returned 指针上调用 delete[]
,retCharPtr1()
分配的内存将被泄漏。
这两种情况的解决方案都是return一个std::string
而不是一个char*
。让编译器和 std::string
为您管理内存。