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