【发布时间】:2021-05-23 02:59:22
【问题描述】:
我最近接触了 C++,但在使用 malloc 时遇到了问题。 下面的代码不会打印出“成功”(程序崩溃,退出代码为 0xC0000005),而如果我使用 calloc 代替,一切正常。
int main(){
std::string* pointer = (std::string*) malloc(4 * sizeof(std::string));
for(int i = 0; i < 4; i++){
pointer[i] = "test";
}
std::cout << "Success" << std::endl;
return 0;
}
下面的代码有效。
calloc(4, sizeof(std::string));
如果我分配正常数量的 12 倍,Malloc 也可以工作。
有人可以解释这种行为吗?这和 std::string 有关系吗?
【问题讨论】:
-
考虑阅读good book。
-
不要在 C++ 中使用
malloc/calloc/realloc/free。使用正确调用构造函数/析构函数的new/new[]/delete/delete。甚至更好的是,使用容器和/或智能指针。避免手动内存管理。 -
问题是你没有构建需要的字符串.....如果你决定使用
malloc你需要放置new你之前得到的内存你把它当作一个字符串...... -
我认为它初始化了字符串本身它不构造字符串。你使用它的方式是UB。
-
@TinSlam 我最近接触了 C++ -- 自从你刚接触 C++ 以来,你都在读什么书?我所知道的没有一本书向 C++ 程序员介绍
malloc或calloc创建对象。或者您正在阅读C书籍并将其应用于C++?如果是这样,你会犯更多类似于你现在犯的错误。
标签: c++ malloc stdstring calloc