草庐IT

延时分配

全部标签

c++ - 如果缩小分配的内存大小,还要检查 realloc() 吗?

当您调用realloc()时,您应该在将返回的指针分配给作为参数传递给函数的指针之前检查函数是否失败...我一直遵守这条规则。当您确定内存将被截断而不是增加时,是否有必要遵循此规则?我从未见过它失败。只是想知道我是否可以保存一些说明。 最佳答案 realloc可以自行决定将block复制到新地址,而不管新大小是更大还是更小。如果malloc实现需要新分配以“缩小”内存块(例如,如果新大小需要将内存块放在不同的分配池中),这可能是必要的。这在glibcdocumentation中有说明。:Inseveralallocationimpl

c++ - 变量的 block 结构内存分配

for(inti=0;i在这里,我想知道变量x的内存是否会被分配两次,或者该值是否在退出第二个block后才重置并且内存只分配一次(对于x)? 最佳答案 从C编程模型的角度来看,x的两个定义是两个完全不同的对象。内部block中的赋值不会影响外部block中x的值。此外,循环的每次迭代的定义也算作不同的对象。在一次迭代中为任一x赋值不会影响后续迭代中的x。就实际实现而言,假设未进行优化,有两种常见情况。如果您打开了优化,您的代码可能会被丢弃,因为编译器很容易发现循环对它之外的任何东西都没有影响,除了i。两种常见的场景是变量存储在栈中

c++ - 在 C++ 中为 3D 数组分配连续内存

我能够分配连续内存以在C++中分配二维数组。我不知道如何为3D阵列做。我已经阅读了一些帖子,但我无法想出解决方案。#includeusingnamespacestd;intmain(intargc,char**argv){cout 最佳答案 具有P平面的3d数组,每个平面都有R行和C列将需要P*R*C元素。您可以立即分配它们,例如:Element*p=newElement[P*R*C];然后访问坐标(p,r,c)处的元素,您可以使用公式:intindex=(p*R+r)*C+c;为了让事情变得可读,一个简单的解决方案是创建一个类te

C++ 字符串重新分配,旧字符串是否正确释放?

我有一个C++类,它的成员是一个字符串,类似于:classPhone{stringname;voidfoo(){name=string("new_name");}}现在,在函数“foo”中,我将字符串重新分配给“new_name”。我的问题是:旧的空字符串会怎样?它是否正确“释放”?它还占用内存吗?现在我将Phone的构造函数中的字符串初始化为string("old_name")。这和之前的空字符串是一样的吗?旧字符串“old_name”在这里发生了什么? 最佳答案 是的,std::string为您管理内存。(这是它存在的原因之一!

c++ - 如果 malloc(STL 分配器等)请求分配 0 字节会发生什么

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:whatdoesmalloc(0)return?它是否返回零指针?行为是否规范?STL分配器怎么样?我用谷歌搜索,但找不到我要找的答案。编辑:链接的问题没有解释STL分配器。我还有另一个相关问题。如果尝试释放零指针会发生什么情况?allocator.deallocate(0,1);

c++ - 为变量分配新值时内存泄漏?

是的,我是那些从Java学习C++的人之一,被自动垃圾收集器宠坏了。有一种特殊情况,我想知道我是否正在泄漏内存。让我们在C++中考虑:bool*test=newbool(false);test=newbool(true);deletetest;我在这里泄漏内存了吗?或者我应该在分配新值之前先调用delete吗?像这样:bool*test=newbool(false);deletetest;test=newbool(true);deletetest;我的直觉告诉我第一个是正确的,因为指针test指向内存中的同一地址,并为其变量分配一个新值,不会改变这个地址。或者new运算符是否在内存中分

c++ - 替换标准 C++ 分配器?

我想用更健壮的分配器替换标准分配器(C++标准只需要对vector::resize进行溢出检查)。许多库提供的各种C++分配器在进行负面self测试时会一败涂地。我可以使用更强大的分配器。ESAPI的分配器不仅检查溢出,它还有调试仪器来帮助发现错误。http://code.google.com/p/owasp-esapi-cplusplus/source/browse/trunk/esapi/util/zAllocator.h.是否有一种标准方法可以轻松替换程序中使用的C++分配器?我还想确保它在库代码中被替换,我可能无法访问源代码。 最佳答案

【2024华为OD机试C卷】331、信道分配 | 机试真题+思路参考+代码解析(C语言、C++、Java、Py、JS)

文章目录一、题目🎃题目描述🎃输入输出🎃样例1🎃样例2二、代码与思路参考🎈C语言思路🎉C代码🎈C++语言思路🎉C++代码🎈Java语言思路🎉Java代码🎈Python语言思路🎉Python代码

自动分配车辆路线服务

我在用JSprit对于车辆路线,我会在现有解决方案中的新服务自动分配中受到打击。看答案给所有车辆自己的独特技能。必须在新问题中定义任何预分解的订单,并将其最初分配给车辆的技能要求(即在新订单之前的先前解决方案中)。只有新的订单涉足问题,没有预先确定的驾驶员技能(超出了它可能携带的“实际”技能要求)。JSprit在选择用于插入订单的车辆时很聪明(它将为每个新插入物进行过滤您的车队,以便在计算插入成本之前会降低其选择权)。因此,即使你别加载现有的解决方案,但再次开始解决方案周期,好像它完全是一个全新的问题,您以前解决的订单将迅速(一个订单的一个插入周期)回到他们应该使用的车辆;每个旧订单只能去一辆

c++ - vector 预分配无法正常工作

我在使用以下代码时遇到了一些问题:#include#inclduetemplateclassA{private:std::vectordata;public:A(){};A(intcapacity){data.reserve(capacity);}intGetCapacity(){returndata.capacity();}};intmain(){Aa;a=A(5);std::cout输出为0。可能是什么问题? 最佳答案 std::vector的复制构造函数和赋值运算符不需要复制vector的容量,只需要复制元素。因为行a=A(5