在我的一個C++函數中,我打電話給ab demangle。我想在將其更改爲字符串之後解除分配結果。下面是代碼:在C++中使用free(const char *)11
const char * realName;
string name;
const std::type_info &ti = typeid(*this);
realName = abi::__cxa_demangle(ti.name(), 0, 0, &status);
name= realName;
int index =name.find_last_of(':');
name = name.substr(index+1, name.length()-index-1);
free((void *) realName);
的代碼運行沒有問題,但是Eclipse編譯器是不是快樂,展示了使用免費的錯誤:「功能‘免費’無法解析」。
我試圖用刪除的,而不是免費的。
delete realName;
的代碼運行沒有問題,和eclipse編譯器是幸福的,但是當我用Valgrind的配置代碼,我得到一個剖析錯誤: 不匹配的free()/刪除/刪除[]
所以我的問題是: 1 - 我應該在C使用免費++或應我使用時只需刪除,刪除[] 2 - 如果我不應該免費使用的valgrind爲什麼給我一個錯誤 3-如果我應該使用免費的爲什麼Eclipse CDT的comipler給我一個編譯錯誤,但是當我運行代碼時,一切正常。 4-是我的代碼有正確的風格基於c + + 11?或者它是C和舊C++的組合?
感謝您的回答。我應該使用還是?爲什麼代碼在eclipse中運行時沒有問題,但是它在eclipse中顯示編譯錯誤? –
Govan
@Govan在C++''頭對應於''的C. –
dasblinkenlight
''保證'std :: free'存在,''保證'free'存在(在全局命名空間中),它不能保證反過來工作 –