2014-10-30 48 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>等標準類。如果你曾經這樣做過,那麼你應該只在構造函數和析構函數中這樣做。有些情況下,這種情況可能不適用,但在這些情況下,您應該非常小心,不要泄露例外情況。這不是那種罕見的情況之一,實際上它遠非如此。