c++ - 内存泄漏,指向文字的指针

标签 c++ pointers memory-leaks

我学会了不要让指针指向文字,因为它会导致内存泄漏。但是当我将指针分配给文字时,它仍然指向与之前相同的地址:

    unsigned maxlen = 20;
    char* testpointer = new char[sizeof(char) * maxlen]; //Pointer points to RAM
    cout << "&testpointer = " << &testpointer << endl;

    strncpy(testpointer, "Happy Eastern", 13);
    cout << "&testpointer = " << &testpointer << endl;

    testpointer = "Merry Christmas"; // I know I shouldn't do this
    cout << "&testpointer = " << &testpointer << endl;

每次我仍然得到相同的内存地址:

&testpointer = 0x28fc60
&testpointer = 0x28fc60
&testpointer = 0x28fc60

当我让指针指向文字时,地址不应该改变吗? 我认为我用 new 分配的内存应该在 RAM 中,而文字应该在 ROM 中,它们应该有不同的地址。我错了吗?

谢谢你,菲利普

最佳答案

您的cout 指令正在打印名为testpointer 的变量的地址。这是当前函数堆栈帧中的某个位置。与testpointer的值无关,也与testpointer指向的值无关。

另外,要么告诉你不应该让指针指向文字的人疯了,要么你不明白他们对你说的话。让一个指针指向一个文字是绝对没有问题的。

关于c++ - 内存泄漏,指向文字的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47906700/

相关文章:

c++ - 向后读取文件的适当 madvise 设置是什么?

c++ - 为什么不能从派生类对象访问父类的赋值运算符

c++ - 如何将 8 个字节写入 void * 地址?

c++ - 重载函数以接受模板指针变量

java - JavaFX 中带有单元工厂的动态加载表单 : Memory Leaks Waiting to Happen?

c# - Emgu CV - 内存泄漏(内存消耗)

c++ - toUniquePtr 实现

c++ - 通过依赖类型使用非类型模板参数的单类型模板参数类模板的部分特化

c++ - 可以在纯 C++ 中使用指针吗?

c++ - C++中从虚析构函数调用虚方法