gpt4 book ai didi

c++ - 函数中的内存释放 (C++)

转载 作者:行者123 更新时间:2023-11-30 04:05:54 24 4
gpt4 key购买 nike

我正在阅读 C++ 入门书中的以下代码:

#include <iostream>
#include <cstring> // or string.h

using namespace std;

char * getname(void); // function prototype

int main()
{
char * name; // create pointer but no storage
name = getname(); // assign address of string to name
cout << name << “ at “ << (int *) name << “\n”;
delete [] name; // memory freed
name = getname(); // reuse freed memory
cout << name << “ at “ << (int *) name << “\n”;
delete [] name; // memory freed again
return 0;
}

char * getname() // return pointer to new string
{
char temp[80]; // temporary storage
cout << “Enter last name: “;
cin >> temp;
char * pn = new char[strlen(temp) + 1];
strcpy(pn, temp); // copy string into smaller space
return pn; // temp lost when function ends
}

函数“getname”返回后,指针“pn”发生了什么?内存分配没有被删除,这不是应该引起问题吗?

最佳答案

What happens with the pointer 'pn' after the return of the function 'getname' ?

指针值(基本上是一个内存地址)在调用点被简单地复制,例如:

char * name; // create pointer but no storage
name = getname()

getname()返回的pn的值(即内存地址)被复制到name

the memory allocation is not deleted, isn't it supposed to cause a problem?

实际上,我在您发布的代码中阅读了一些delete[] 行。所以在我看来,内存实际上被释放了。

当然,这段代码很奇怪:也许是出于某种学习目的?是不是要教一些东西?

在现代 C++ 生产代码中,您应该只使用方便的 RAII 字符串类,如 std::string 来存储和管理您的字符串。

关于c++ - 函数中的内存释放 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23090187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com