家庭作业:通过使用指针交换字符来实现C ++反向字符串

时间:2014-10-30 02:42:30

标签: c++ pointers

我的程序将使用指针交换字符串中的所有字符。当我尝试删除指针并释放内存时,我的问题就出现了。我得到一个无效的指针错误,即使我在创建它后立即尝试删除指针。这是一门计算机科学课程活动,必须这样做,它不是一个年级,我只想学习我正在做的任何错误。

#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;
}

1 个答案:

答案 0 :(得分:2)

new分配内存,但你还没有完成。你也不应该。您的内存将作为std::string对象的一部分进行分配,并在超出范围时自动删除。

请参阅RAII

在此阶段,您可能无需使用newdelete,只需使用std::stringstd::vector<T>等标准类即可。如果你曾经这样做过,你可能只应该在构造函数和析构函数中这样做。可能在极少数情况下这不适用,但在这种情况下,您应该非常小心,不要在呼叫异常时泄漏。这不是罕见的情况之一,实际上远不是它。