草庐IT

c++ - 当 malloc()-ing 相同的结构时,如何在结构中使用 C++ 字符串?

我编写了以下示例程序,但它因段错误而崩溃。问题似乎在于在结构中使用malloc和std::strings。#include#include#includestructexample{std::stringdata;};intmain(){example*ex=(example*)malloc(sizeof(*ex));ex->data="helloworld";std::coutdata我不知道如何使它工作。如果甚至可以使用malloc()和std::strings有什么想法吗?谢谢,博达·赛多。 最佳答案 您不能在C++中mall

c++ - 当 malloc()-ing 相同的结构时,如何在结构中使用 C++ 字符串?

我编写了以下示例程序,但它因段错误而崩溃。问题似乎在于在结构中使用malloc和std::strings。#include#include#includestructexample{std::stringdata;};intmain(){example*ex=(example*)malloc(sizeof(*ex));ex->data="helloworld";std::coutdata我不知道如何使它工作。如果甚至可以使用malloc()和std::strings有什么想法吗?谢谢,博达·赛多。 最佳答案 您不能在C++中mall

c++ - 为什么 malloc(0) 的返回值是实现定义的?

ISO/IEC9899:TC2(即C99标准),§7.20.3规定:Ifthesizeofthespacerequestediszero,thebehaviorisimplementation-defined:eitheranullpointerisreturned,orthebehaviorisasifthesizeweresomenonzerovalue,exceptthatthereturnedpointershallnotbeusedtoaccessanobject.换句话说,malloc(0)可能返回NULL或我不能取消引用的有效指针。这种行为背后的原因是什么?仅仅定义mal

c++ - 为什么 malloc(0) 的返回值是实现定义的?

ISO/IEC9899:TC2(即C99标准),§7.20.3规定:Ifthesizeofthespacerequestediszero,thebehaviorisimplementation-defined:eitheranullpointerisreturned,orthebehaviorisasifthesizeweresomenonzerovalue,exceptthatthereturnedpointershallnotbeusedtoaccessanobject.换句话说,malloc(0)可能返回NULL或我不能取消引用的有效指针。这种行为背后的原因是什么?仅仅定义mal

c++ - 在混合 C/C++ 程序中协调 malloc 和 new 的 "correct"方法是什么?

我有一个混合的C/C++程序。它包含一个针对C的flex/bison解析器,而其余部分是C++。作为C,生成的解析器和扫描器使用malloc、realloc和free管理它们的内存。它们足以暴露钩子(Hook),允许我提交我自己的这些函数的实现。如您所料,(C++)程序的其余部分“想要”使用new、delete等。做一些研究似乎表明相关标准并不能保证这种混合应该有效。特别是C“堆”不一定是C++“空闲区域”。看来这两个方案可以互相践踏。除此之外,有一天(很快)这个程序可能会想要集成一个自定义的堆实现,例如tcmalloc,C和C++都使用。什么是“正确”的做法?考虑到集成tcmallo

c++ - 在混合 C/C++ 程序中协调 malloc 和 new 的 "correct"方法是什么?

我有一个混合的C/C++程序。它包含一个针对C的flex/bison解析器,而其余部分是C++。作为C,生成的解析器和扫描器使用malloc、realloc和free管理它们的内存。它们足以暴露钩子(Hook),允许我提交我自己的这些函数的实现。如您所料,(C++)程序的其余部分“想要”使用new、delete等。做一些研究似乎表明相关标准并不能保证这种混合应该有效。特别是C“堆”不一定是C++“空闲区域”。看来这两个方案可以互相践踏。除此之外,有一天(很快)这个程序可能会想要集成一个自定义的堆实现,例如tcmalloc,C和C++都使用。什么是“正确”的做法?考虑到集成tcmallo

c++ - C中不必要的指针转换

我在这个帖子上的回答得到了评论:Mallocinsideafunctioncallappearstobegettingfreedonreturn?简而言之,我有这样的代码:int*somefunc(void){int*temp=(int*)malloc(sizeof(int));temp[0]=0;returntemp;}我收到了这条评论:CanIjustsay,pleasedon'tcastthereturnvalueofmalloc?Itisnotrequiredandcanhideerrors.我同意在C中不需要强制转换。在C++中它是强制性的,所以我通常添加它们以防万一有一天我

c++ - C中不必要的指针转换

我在这个帖子上的回答得到了评论:Mallocinsideafunctioncallappearstobegettingfreedonreturn?简而言之,我有这样的代码:int*somefunc(void){int*temp=(int*)malloc(sizeof(int));temp[0]=0;returntemp;}我收到了这条评论:CanIjustsay,pleasedon'tcastthereturnvalueofmalloc?Itisnotrequiredandcanhideerrors.我同意在C中不需要强制转换。在C++中它是强制性的,所以我通常添加它们以防万一有一天我

c++ - 为什么新的 std::nothrow 版本没有被广泛使用

这个问题在这里已经有了答案:nothroworexception?(6个回答)关闭9年前。根据C++reference,您可以通过以下方式新建对象:MyClass*p1=newMyClass;或通过MyClass*p2=new(std::nothrow)MyClass;第二个将返回一个空指针而不是抛出异常。但是,根据我的经验,我几乎看不到这个版本。例如,Google不建议在他们的代码中使用异常,但我可以看到他们在Chromium中也没有使用nothrow版本。有什么理由让我们更喜欢默认的而不是nothrow吗?即使在不使用异常的项目中?--编辑--后续问题:我应该检查malloc()的

c++ - 为什么新的 std::nothrow 版本没有被广泛使用

这个问题在这里已经有了答案:nothroworexception?(6个回答)关闭9年前。根据C++reference,您可以通过以下方式新建对象:MyClass*p1=newMyClass;或通过MyClass*p2=new(std::nothrow)MyClass;第二个将返回一个空指针而不是抛出异常。但是,根据我的经验,我几乎看不到这个版本。例如,Google不建议在他们的代码中使用异常,但我可以看到他们在Chromium中也没有使用nothrow版本。有什么理由让我们更喜欢默认的而不是nothrow吗?即使在不使用异常的项目中?--编辑--后续问题:我应该检查malloc()的