草庐IT

dynamic-memory-allocation

全部标签

c++ - 两种数组声明方法c++的区别

在C++中可能有多种声明数组(并为它们分配内存)的方法中的这两种1.inta[3];2.int*b=newint[3];我想了解C++如何区别对待这两者。一个。在这两种情况下,我都可以使用以下语法访问数组:a[1]和b[1]当我尝试cout和cout,都打印各自数组的第一个元素的地址。在我看来,a和b都被视为指向数组第一个元素的指针。但奇怪的是,当我尝试做cout和sizeof(b)它们打印不同的值-分别为4和12。我不明白为什么在sizeof(b)的情况下,正在打印整个数组的大小。 最佳答案 a是一个数组(类型int[3])b是一

c++ - bad_alloc 在初始化和填充 vector 时?

在尝试生成随机数vector时,我偶然发现了一个std::bad_alloc错误。这是我的代码:#include"search.h"#include"gtest/gtest.h"int_size=100;std::vectorGetSortedVector(intsize){//initvectorstd::vectorv(size);//fillwithrandomnumbersfor(std::vector::size_typei=0;iv=GetSortedVector(_size);//nothingmovesfartherthanthisline}附注:我现在确实在使用gen

c++ - 有什么方法可以在不对所有内容使用动态内存的情况下使用 Qt 吗?

所以,我想我已经在网上彻底搜索了这个,但没有发现任何真正有用的东西(最多只是令人困惑......)。我想知道如何(如果可能)将Qt与非动态内存一起使用。我面临的问题是,对于许多小部件,我确切地知道我想使用什么(这些子小部件、这些布局、固定数量等)。然而,当您不使用动态内存时,Qt中的一切似乎都会成为障碍。一个简单的例子是QLayout,fromtheQtdocumentation旨在获取添加的任何内容的所有权。所以基本上,以下代码://InheaderclassThumbnailDialog:publicQDialog{Q_OBJECTpublic:ThumbnailDialog(QW

c++ - C++中的动态大小的类

我想创建一个包含单词的类Word。我将为字典中的几乎每个单词(如此多)创建一个类的实例——不,我不能使用树结构来为我的特定应用程序存储它。当然,字符串的大小可能会有所不同,我不想破坏内存。我想在类里面这样做:classWord{public:...private:intlen;LetterDataletters[];};然后动态分配Word使用:Word*pNewWord=malloc(sizeof(Word)+sizeof(LetterData)*len);我意识到这不是很C++风格。所以我的问题是:首先,是否有更好的方法来做到这一点,如果没有,这会导致问题吗?Word不会继承任何其

c++ - 通过 https 发布时出现 "CURLE_OUT_OF_MEMORY"错误

我正在尝试编写一个使用libCurl将soap请求发布到安全Web服务的应用程序。此Windows应用程序是针对libCurl版本7.19.0构建的,而后者又是针对openssl-0.9.8i构建的。相关的curl相关代码如下:FILE*input_file=fopen(current->post_file_name.c_str(),"rb");FILE*output_file=fopen(current->results_file_name.c_str(),"wb");if(input_file&&output_file){structcurl_slist*header_opts=0

c++ - 尽管未定义 <new> header ,但 New 会抛出 bad_alloc?

new是怎么回事?程序中的表达式可以抛出bad_alloc尽管没有#include还是出错(因为这个错误isdefinedintheheader)?来自3.7.4。N3337的:Thelibraryprovidesdefaultdefinitionsfortheglobalallocationanddeallocationfunctions.Someglobalallocationanddeallocationfunctionsarereplaceable(18.6.1).AC++programshallprovideatmostonedefinitionofareplaceablea

c++ - 如果构造函数抛出异常,如何删除对象?

所以我们有一个构造函数可以根据传递给它的参数抛出异常,但我们不知道如果发生这种情况如何删除对象。代码的重要部分:try{GameBase*gameptr=GameBase::getGame(argc,argv);if(gameptr==0){std::coutplay();}deletegameptr;}catch(errore){if(e==INVALID_DIMENSION){std::cout在第三行中,GameBase::getGame()调用从GameBase派生的其中一个游戏的构造函数并返回指向该游戏的指针,这些构造函数可以抛出异常。问题是,如果发生这种情况,我们如何才能删

C++ 动态对象。运行时如何确定对象大小?

我不明白一件事。例如,我声明A类和B类是A的子类:classA{public:inta;}classB:publicA{public:intb;}显然,如果我创建A或B的实例,它们在内存中的大小可以由类型决定。AinstanceA;//sizeofthiswillprobablybethesizeofint(propertya)BinstanceB;//sizeofthiswillprobablybetwicethesizeofint(propertiesaandb)但是如果我创建动态实例然后释放它们呢?A*instanceAPointer=newA();A*instanceBPoin

c++ - 为什么STL要为Allocator预留接口(interface)?

STL为什么要为Allocator预留接口(interface)?以vector为例:template>classvector;因为我们有很多选择来分配内存和构造对象,比如operatornew,delete,new[],delete[],它几乎可以做我们创建对象时需要做的任何事情。那么,为什么像vector这样的STL容器需要一个Allocator接口(interface),如果我们不分配一个,它在大多数情况下都是默认的std::allocator?为什么不直接使用新的表达式呢?如果目的是使用户定义的分配行为成为可能,为什么不让用户提供他们自己定义的operatornew、new[]

c++ - 如何测试 std::memory_order_relaxed 的行为?

我已经阅读了std::memory_order_relaxed的文档.Relaxedordering的部分解释是......//Thread1:r1=y.load(memory_order_relaxed);//Ax.store(r1,memory_order_relaxed);//B//Thread2:r2=x.load(memory_order_relaxed);//Cy.store(42,memory_order_relaxed);//D对此的解释是……[It]isallowedtoproducer1==r2==42.Inparticular,thismayoccurifDisc