草庐IT

信道分配

全部标签

c++ - 为什么我看到在堆和堆栈上分配的数组之间存在不同的行为?

我正在检查C++中两个二维数组的行为,一个从堆栈分配,一个从堆分配。我创建了两个相同形状的二维数组,并用一些数据填充这些数组。然后我尝试用两种不同的方法读取数组,第一种是使用简单的数组索引格式“Arr[ROW][COLUMN]”。然后我使用指针取消引用读取数组,我得到了堆分配数组的两个不同结果,但堆栈分配数组的结果相同。我试图理解为什么结果不同。如果有人可以提供任何说明,我将不胜感激。提前致谢。我正在运行的代码如下:#includeusingnamespacestd;intmain(){introws=6;intcolumns=3;//allocatefromthestack.doub

c++ - 在 C++ 中声明指向结构的指针会自动为其成员分配内存。我错了吗?

我编写了以下代码,我相信如果我试图访问我什至没有为其分配内存的结构的成员,它就会崩溃。但我很惊讶C++自动为结构分配内存。这是正常行为吗?相比之下,如果您声明一个指向对象的指针,然后尝试访问任何成员而没有使用运算符“new”实际创建对象,程序就会崩溃。我只是好奇为什么它会起作用,而我认为它不应该起作用。这是我的程序:#includestructProduto{intcodigo;floatpreco;};intmain(){structProduto*sabonete;sabonete->codigo=654321;sabonete->preco=0.85;printf("Codigo

c++ - 重新分配 C++ 数组的内存。

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:HowdoyoureallocinC++?我知道如果内存已通过malloc()或calloc()realloc()重新分配(扩展)C++数组。我的问题是,如何扩展C++中的数组,其内存已通过new运算符分配?

c++ - C++构造函数分配内存失败怎么办?

我刚遇到一个问题,类的构造函数需要分配内存。于是开心地写了char*mem=static_cast(malloc(100*sizeof(*mem)));.但后来我突然意识到,如果出现错误,我无法返回错误代码(我没有在我的代码中使用异常)。我该如何解决这个问题?我应该添加一个boolinitialized吗?成员,然后在完成我的类(class)之后,然后立即检查它,如:myClassmc;if(!mc.initialized){printf("Memoryallocationfailedinmc'sconstructor\n");exit(1);}谢谢,BodaCydo。

c++ - 新分配的 std::vector<int> 元素是否初始化为 0?

假设我们使用std::vector或std::vector.随着vector大小的增长,新分配的元素会被默认初始化为0,还是程序员需要显式地将它们初始化为0? 最佳答案 新元素是值初始化的:[C++11:23.3.6.3/9]:voidresize(size_typesz);Effects:Ifsz,equivalenttoerase(begin()+sz,end());.Ifsize(),appendssz-size()value-initializedelementstothesequence.对于int和long这意味着0:[

c++ - 这个重新分配是否正确?

我有一个分配如下的3x3二维动态数组:int**matrix=newint*[3];matrix[0]=newint[3*3];for(inti=1;i我应该如何释放它?这是正确的吗:delete[]matrix;delete[]matrix[0];或者我还应该删除matrix[1],[2] 最佳答案 按照你的方式,你应该:delete[]matrix[0];delete[]matrix;但这是一种非常非常规的分配动态二维数组的方式。通常,您分配一个指针数组,然后为每一行(列)分配一个实际类型的数组。//allocateint**m

C++ 初始化列表和内存分配

以下是否有效?classmyClass{private:...intm_nDataLength;boost::shared_arraym_pData;...public:myClass():...,m_nDataLength(10),m_pData(newint[m_nDataLength]),...{}}我假设初始化将完全按照我在ctor中给出的顺序进行,这是否正确?如果不是,如果m_nDataLength的初始化发生在m_pData之后怎么办? 最佳答案 虽然您的示例中的初始化确实按照您希望的顺序进行,但这并不是您假设的原因:初

c++ - 基本的 C 风格字符串内存分配

我正在使用现有代码开发一个项目,该代码主要使用C++,但使用C风格的字符串。采取以下措施:#includeintmain(intargc,char*argv[]){char*myString="thisisatest";myString="thisisaveryveryveryveryveryveryveryveryveryveryverylongstring";cout这编译并运行良好,输出是长字符串。但是我不明白为什么它有效。我的理解是char*myString是一个指针,指向一个足够大的内存区域来保存字符串文字“thisisatest”。如果是这样,那么我如何才能在同一位置存储更

c++ - 在 C++ 中,有任何处理内存分配/删除的一般准则吗?

可能我所要求的只是指向我尚未找到的网站的链接。但是来自Java背景,在C++中处理内存分配和删除的一般准则是什么?我觉得我可能会在我的应用程序中添加各种内存泄漏。我知道智能指针有多种变体,您也可以向我提及它们,但我想关注标准C++指针。 最佳答案 我一贯的方针是这样的在用法非常复杂的地方使用智能指针。所有原始指针都属于负责删除它的特定对象。如果以后要设置指针,构造函数总是分配指针或将其初始化为null。析构函数总是删除所有包含的指针这些规则确保指针在其拥有的对象被删除时被删除,从而消除了最常见的内存泄漏情况。永远不要将内部指针传递给

c++ - 在 C 中返回堆栈数据;它是否正确取消分配?

我在审查一位friend的代码时,就C/C++如何在堆栈上分配内存和管理其释放展开了一场有趣的辩论。如果我要在一个函数中创建一个包含10个对象的数组,但返回该数组,它是在函数弹出时释放(因此使给定数据无效)还是放入堆中(这引发了我们如何释放它?)。示例代码如下:Gene*GetTopTen(){//Create10genes(or10objects,doesn'tmatter)GeneTen[10];//SortoutexternalpooldataSort();//Copyoverdatatothearrayof10objectsfor(inti=0;i非常感谢任何帮助,这正在变成一