我已經執行了下面的代碼,它完美地工作。既然是關於指針,我只想確定一下。雖然我確信將char *分配給字符串會生成副本,即使我刪除了char *,字符串var也會保留該值。將字符分配給字符串變量後刪除char *
#include <stdio.h>
#include <string.h>
#include <string>
#include <iostream>
int main()
{
std::string testStr = "whats up ...";
int strlen = testStr.length();
char* newCharP = new char[strlen+1];
memset(newCharP,'\0',strlen+1);
memcpy(newCharP,testStr.c_str(),strlen);
std::cout << " :11111111 : " << newCharP << "\n";
std::string newStr = newCharP ;
std::cout << " 2222222 : " << newStr << "\n";
delete[] newCharP;
newCharP = NULL;
std::cout << " 3333333 : " << newStr << "\n";
}
我只是改變我公司項目中的一些代碼和char *在C++函數之間傳遞。 char *指針已被複制到字符串中,但char *在函數結尾處被刪除。我找不到任何具體原因。所以我只是刪除了char *,只要它被複制到一個字符串中。這會造成任何問題......?
P.S:我已經在Codereview中提過這個問題,但我有建議將它移到SO。所以我已經把它貼上標籤並在這裏發佈這個問題。
感謝馬特,實際上char *是從另一個函數傳遞的。就像我說我正在處理一些舊的代碼,我不能繼續和改變所有函數調用中的參數。我們的代碼庫相當大。這些char *的刪除在函數的許多部分中執行,每個只在一些條件下執行一次。雖然我不喜歡代碼重複,所以我只是將char *複製到字符串中,並在函數本身的開頭刪除了char *。 – 2013-03-10 16:11:58
@ManikandarajS:哼!我知道你的痛苦,我必須自己處理一些陰沉的應用程序:(在這種情況下,你正在朝着正確的方向努力限制「感染」並調整你必須處理的代碼,以便它變得更好! – 2013-03-10 16:26:43