我寫了下面的示例程序,但它崩潰與段錯誤。問題似乎是在結構中使用malloc
和std::string
。如何在malloc()結構中使用C++字符串?
#include <iostream>
#include <string>
#include <cstdlib>
struct example {
std::string data;
};
int main() {
example *ex = (example *)malloc(sizeof(*ex));
ex->data = "hello world";
std::cout << ex->data << std::endl;
}
我想不出如何使它工作。任何想法,如果它甚至可以使用malloc()
和std::string
s?
謝謝,Boda Cydo。
我正在使用malloc(),因爲新引發異常而不是返回NULL。我只是不希望在那部分代碼中出現異常。該代碼發生在C回調中,我不想在C回調中拋出C++異常。所以我用malloc。有關於此的任何想法? – bodacydo 2010-08-05 06:09:37
@bodacydo:您可以使用'new(std :: nothrow)示例'來使'new'返回空指針而不是拋出異常。你必須包含頭文件''來使用'std :: nothrow'常量。 –
AnT
2010-08-05 06:20:19
@bodacydo:如果你真的想'new'在失敗時返回一個空指針,使用'new(nothrow)example'。但是真的,你應該使用'try' /'catch'來捕獲拋出的異常。 (例如,'std :: string'賦值,如果分配內存失敗,也可能會拋出異常。) – jamesdlin 2010-08-05 06:22:13