2014-10-30 47 views
-2

我有使用指针交换字符串中所有字符的程序。我尝试删除指针并释放内存时发生问题。即使在创建它们之后尝试删除指针,我也会得到一个无效的指针错误。这是计算机科学课程活动,必须这样做,它不是一个年级,我只是想从我犯的任何错误中学习。作业:使用指针交换字符的C++反向字符串

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

'std :: reverse(s.begin(),s.end());'为什么地球上你想要删除自动变量? – user657267 2014-10-30 02:44:03

+0

这是一个班级活动的要求。这不是一个等级,我甚至不需要这样做,我只是想知道为什么它不起作用。 – kylealanr 2014-10-30 03:11:46

回答

2

new分配内存,你没有这样做。你也不应该。您的记忆体将作为std::string对象的一部分进行分配,并在超出范围时自动删除。

请参阅RAII

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