我已經執行了下面的代碼,它完美地工作。因爲它是關於指針,我只是想確定。雖然我確信將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 *,只要它被複制到一個字符串中。這會造成任何問題..?
這不是一個真正的代碼審查問題,說實話。我會說這個問題最好放在StackOverflow.com上。 – 2013-03-08 22:08:48
@OJ。你可以移動這個問題到stackoverflow嗎? 。我想因爲這是一個代碼檢查,我可以在這裏發佈。 – 2013-03-09 20:59:00
@ManikandarajS我同意OJ。你把它當作代碼審查請求來表示,但這裏仍然有一個非常具體的問題(即:「是否在創建一個'std :: string'後才刪除一個char數組?」),並且你發佈的用於審查的代碼是僅僅是一個例子來說明這個問題。所以在我看來,這個問題將非常適合Stack Overflow。我現在正在移動它。 – sepp2k 2013-03-10 18:08:46