草庐IT

St9bad_alloc

全部标签

C++ allocator<X>::deallocate(NULL,1) 允许吗?

free(NULL)和::operatordelete(NULL)都是允许的。分配器概念(例如std::allocator是否也允许deallocate(NULL,1),或者是否需要自己保护它? 最佳答案 您需要添加自己的支票。根据§20.4.1.1/8,deallocate要求:pshallbeapointervalueobtainedfromallocate().nshallequalthevaluepassedasthefirstargumenttotheinvocationofallocatewhichreturnedp.a

c++ - 内存管理和 std::allocator

在检查我的代码时,我看到我使用了一些“丑陋”的结构,在一个类(称为“map”)中我有一个包含“数据”类的vector:std::vectorvector;其中PointerToHUGEClass就像名称描述的那样。(尽管指向的对象也属于map类,并在构造函数中使用“new”参数创建)。这一切都很好(目前)。不过,我仍然觉得它更像是一种解决方法。我使用“PointerToHUGEClass”而不仅仅是“HUGEClass”的唯一原因是因为我想确保对象不是从堆栈中声明的。然而,这是在我了解分配器之前完成的。现在我觉得分配器的任务或多或少是确保内存不是从堆栈中声明的。我的问题:我假设分配器负

c++ - 差异 : cin. getline() 和 getline(cin, st)

哪个更好,更受欢迎?我真的发现阅读API令人困惑。 最佳答案 成员(member)版读入char*,免费版读入std::string。所以更喜欢免费版!像这样使用它:std::istream&ins=/*...*/;std::stringline;while(std::getline(ins,line)){//processline} 关于c++-差异:cin.getline()和getline(cin,st),我们在StackOverflow上找到一个类似的问题:

c++ - 让 Howard Hinnant 的 short_alloc(C++11 版本)在 Visual C++ 2015 中编译

我希望能够将自定义分配器与std::vector一起使用,以便将小数据缓冲区(例如,小于1024字节)存储在堆栈上,并且只有较长的vector存储在堆上。作为一个有Fortran背景的人,每次我必须进行堆内存分配以在五行子程序的持续时间内存储六个元素时,这让我感到body疼痛!HowardHinnant发表了他的short_alloc分配器完全符合我的要求,如果我用gcc编译它,它会很好用。但是,在VisualC++中我无法编译它。在VisualC++2013中,部分问题是不受支持的C++11关键字太多,但即使我已将所有这些都#DEFINE掉,我仍然遇到了问题。今天尝试用VisualC

c++ - 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::c_str':非标准语法;使用 '&' 创建指向成员的指针

我正在尝试创建一个可以读取和编译opengl顶点和片段着色器文件的函数,但是我收到了这个错误:'std::basic_string,std::allocator>::c_str':non-standardsyntax;use'&'tocreateapointertomember我不太确定如何修复它。这是我的代码:GLuintshader_load(constGLchar*vertex,constGLchar*fragment){std::stringver=file_read_all(vertex);std::stringfrag=file_read_all(fragment);con

c++ - 如何调试 std::bad_cast 异常

classGAGenome{virtualvoidmethod(){};};templateclassGAArray{};templateclassGA1DArrayGenome:publicGAArray,publicGAGenome{};intmain(){GA1DArrayGenomegenome;constGAGenome&reference=genome;autocast=dynamic_cast&>(reference);}这个明显错误的程序(因为模板参数不同)崩溃了terminatecalledafterthrowinganinstanceof'std::bad_cast

c++ - Eigen::aligned_allocator 因 std::unordered_multimap 而失败

我正在尝试在XCode6中编译这段代码:std::unordered_multimap,std::equal_to,Eigen::aligned_allocator>>trackingFailed;它失败了:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/unordered_map:1461:5:Static_assertfailed"Invalidallocator::value_type"Eigen3.2.2还需要用aligned_al

C++ STL 问题 : allocators

我有一个(可能是愚蠢的)关于C++STL的问题。当我创建一个容器(vector、set、map等)时,它是分配在栈上还是堆上?如果我制作一个集合并放入500万个字符串,我是否需要担心堆栈溢出? 最佳答案 STL类默认从堆中分配其内部缓冲区,尽管这些类也允许自定义分配器,允许用户指定备用位置进行分配-例如共享内存池。 关于C++STL问题:allocators,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c

c++ - 如何在中等规模的项目中诊断 g++ 错误 "cc1plus.exe: out of memory allocating 838860800 bytes"?

这个问题在这里已经有了答案:Running'gcc'onC++sourcefileonLinuxgives"cc1plus:outofmemoryallocating..."errormessage(2个答案)关闭6年前。我正在尝试移植我的C++library使用基本的g++makefile(它在VisualStudio中编译得很好)。我现在尝试编译的部分大约有45000行代码。库本身编译正常,但是当我尝试将它包含到控制台界面应用程序中时,编译器崩溃并显示以下消息,没有其他消息:cc1plus.exe:outofmemoryallocating838860800bytes当我包含项目的

c++ - 为什么不是 std::string::max_size() == std::string::allocator::max_size()

最近我注意到给定std::strings的情况下以下陈述不正确.s.max_size()==s.get_allocator().max_size();我发现这很有趣,默认情况下std::string将使用std::allocator其理论极限为size_type(-1)(是的,我知道我假设2的补码,但这与实际问题无关)。我知道实际限制会比这少得多。在典型的32位x86系统上,内核将占用2GB(可能是1GB)的地址空间,实际上限要小得多。无论如何,GNUlibstdc++的std::basic_string::max_size()似乎返回相同的值,不管它使用的分配器说什么(类似于1073