我的程序将使用指针交换字符串中的所有字符。当我尝试删除指针并释放内存时,我的问题就出现了。我得到一个无效的指针错误,即使我在创建它后立即尝试删除指针。这是一门计算机科学课程活动,必须这样做,它不是一个年级,我只想学习我正在做的任何错误。
#include <iostream>
using namespace std;
int main() {
string s;
cin >> s;
char a = 'a';
char b = 'b';
char *c1 = &a, *c2 = &b;
int len = s.length();
for (int i = 0; i < len; i++) {
char temp;
*c1 = s[i];
*c2 = s[(len - i) -1];
cout << "c1 " << *c1 << endl << "c2 " << *c2 << endl;
temp = *c1;
*c1 = *c2;
*c2 = temp;
if (i == len - 1) {
cout << "Should be deallocating memory" << endl;
delete c1, c2;
cout << "Set to null" << endl;
c1 = NULL;
c2 = NULL;
}
}
cout << "s " << s << endl;
return 0;
}
答案 0 :(得分:2)
new
分配内存,但你还没有完成。你也不应该。您的内存将作为std::string
对象的一部分进行分配,并在超出范围时自动删除。
请参阅RAII。
在此阶段,您可能无需使用new
或delete
,只需使用std::string
和std::vector<T>
等标准类即可。如果你曾经这样做过,你可能只应该在构造函数和析构函数中这样做。可能在极少数情况下这不适用,但在这种情况下,您应该非常小心,不要在呼叫异常时泄漏。这不是罕见的情况之一,实际上远不是它。