如果函数将 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 为您管理内存。