问题标签 [dynamic-allocation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 释放部分动态分配的块?
我很好奇是否存在允许程序员释放部分已分配块的动态内存分配系统。
例如:
关于为什么这是明智/不明智/困难的想法?这样做的方法?
在我看来,它可能很有用。
谢谢!
=====edit===== 经过一番研究,似乎 linux 内核的 bootmem 分配器允许与 bootmem_free 调用类似的操作。所以,我很好奇——为什么 bootmem 分配器允许这样做,但 ANSI C 不允许?
c++ - 向量中的 push_back 失败,malloc 未能分配更多内存
我有一个代码,其中对我的调用push_back
失败。mdb 给了我以下线索。
:: DEM的malloc +〜×49 +的malloc〜×49 == malloc的+〜×49 :: DEM __1cIallocate4CpnGrnc_JO__6FipTA_3_ + 0x2a〜__1cIallocate4CpnGrnc_JO__6FipTA_3_ + 0x2a〜== __type_0 *分配:: DEM __1cJallocator4CpnGrnc_JO__Iallocate6MI_p1_ + 0×20〜__1cJallocator4CpnGrnc_JO__Iallocate6MI_p1_ + 0×20〜== rnc_JO **分配器::分配:: DEM __1cGvector4CpnGrnc_JO__Kinsert_aux6Mp1rk1_v_ + 0xac __1cGvector4CpnGrnc_JO__Kinsert_aux6Mp1rk1_v_ + 0xac ==空隙矢量:: insert_aux :: DEM __1cGvector4CpnGrnc_JO__Jpush_back6Mrk1_v_ + 0x4e __1cGvector4CpnGrnc_JO__Jpush_back6Mrk1_v_ + 0x4e ==空隙矢量::的push_back :: DEM __1cIallocate4CpnGrnc_JO__6FipTA_3_ + 0x2a __1cIallocate4CpnGrnc_JO__6FipTA_3_ + 0x2a == __type_0 *分配: :dem __1cGvector4CpnGrnc_JO__Jpush_back6Mrk1_v_+0x4e __1cGvector4CpnGrnc_JO__Jpush_back6Mrk1_v_+0x4e == void vector::push_back`
我不知道如何纠正?我知道有一个分配的空间实际上大于向量大小。如果使用该空间,它将重新分配所有数据并将其复制到第二个位置。
我也知道向量macx_size
是一个非常大的值,这对我的代码来说不应该失败,因为我没有插入这么多值。你能告诉我我应该调试什么吗?
c++ - 可变长度数组取决于文件 C++ 的长度
我遇到了一个问题,试图将我的算法推广到任何大小的问题。该代码适用于我使用的测试问题,但我必须手动插入一些数组的长度。接下来,我尝试在两个变量中读取输入文件的长度,但是我无法在我的所有代码中使用它们,而只是在某些部分中使用它们。我认为这是一件很愚蠢的事情,但我对 C++ 真的很陌生,我想获得帮助。这是一段代码:
如您所见,在 main() 中,我将输入文件的长度计入 cont_prod 和 cont_slot 变量中,但是我不能在变量声明中使用它们。我需要的可变长度数组必须是全局变量,因为我在其他函数中也需要它们。而且 cont_prod 和 cont_slot 也需要是全局的,因为我在某些函数的局部变量声明中需要它们。这是我需要在其中使用它们的功能之一:
111 是 cont_prod,360 是 cont_slot。我在 Xcode 的 Mac 上编程,它说变量长度数组不能在文件范围内声明,我认为这意味着全局变量。我该如何管理?
c++ - 动态结构错误,指针转换
我在结构的构造函数中收到此错误。为什么我会得到它,因为我只能使用 * 指针而不是 **。
错误:
结构体.h
结构体.cpp
c++ - 尝试将对象数组传递给函数时出错
我正在尝试传递一个数组Student
进入函数processStudent(string myFilename, Student* myArray, int &mySize)
。但它给了我不同类型的错误。
Student() 什么都不做,但我尝试为它们分配某种值,它仍然给出完全相同的错误消息:
主要我有这个:
函数是这样的:
// 在班级Student的cpp文件中
错误信息:
我一直在剥离和剥离我的代码,但这个错误不会消失。我想创建这个数组,并将它传递给 processStudent 函数,这样它就可以在读取文件时设置每一个。
c - 我可以在 C 中释放()静态和自动变量吗?
代码如下:
我尝试编译上面的代码并且它可以工作,我很好奇该free()
函数是否能够同时释放静态变量和自动变量?还是基本上什么都不做?
c++ - 创建指针数组时运算符 new[] 的语法
在创建new[]
指向char
. 由于char*
是我希望元素的类型,因此我使用括号将其括起来,但它不起作用:
但是当我去掉括号时它会起作用:
为什么后一种有效?
php - 具有公共前缀的动态命名数组上的单个foreach循环语句?
我正在我的脚本中创建具有动态名称的数组。以这种方式创建的所有数组都附加了一个数字。
例如:$group1、$group2、$group3、$group4、$group5、$group6、$group7、$group8
如果我知道(并且我的脚本理解)确切有多少个数组(因此,将知道所有的附件),我想知道是否有任何方法可以执行一个可以理解所有 8 个的语句数组,而不必调用 8 个单独的循环。
我想只重写这部分代码以使用多维数组可能会好得多,但是我在很久以前使用这些信息编写了一些其他函数,当时我的经验要少得多,并且还没有意识到该项目。请注意,此项目仅用于个人目的。
举一个更好的例子,是否可以做这样的事情?
c++ - 在这个算法中动态空间分配实际上是如何工作的?
出于学校目的,我自己使用模板对动态分配的数组进行了处理。
虽然我要问的东西有效,但我不知道如何以及为什么,我已经达到了我需要知道的地步。
我需要知道:TElement *auxArray = myArray;
这是如何工作的?是否使用指针,元素是否被一一复制?我需要了解它是如何工作的,这样我才能弄清楚我的算法的复杂性。我不介意有人告诉我复杂性,但我正在寻找的真正答案是它是如何工作的?
另外myArray = new TElement[capacity];
我在删除旧的之前这样做myArray
会删除旧的吗?还是它仍然以一种或另一种形式漂浮在内存中的某个地方?
c++ - 调整动态字符串的大小会导致内存泄漏
我从一个非常简单的程序开始:
tb::String
是我自己的字符串类,旨在处理char
字符串和wchar_t
(Unicode)字符串。它是大量模板化的,tb::String
是tb::StringBase<char>
.
整个过程是使用 CRT 调试实用程序编译的,以检查内存泄漏。这是输出:
所以它看起来像一个空的 tb::String (大小为 0)导致内存泄漏。用这个程序确认,它不会泄漏:
原始程序的调用堆栈:
StringBase<char>
用字符串创建一个""
。m_Length
设置为 0。m_Maximum
设置为m_Length + 1
(1)。m_Data
创建长度为m_Maximum
(1)。m_Data
被清除并充满""
。_AppendSingle
设置为StringBase<char>::_AppendDynSingle
。- 重载的运算符
StringBase<char>::operator =
用字符串调用"Hello World!"
_AppendSingle
叫做。m_Length
为 0,m_Maximum
为 1。checklen
设置为m_Length + src_len + 1
(13)。m_Maximum
乘以 2 直到大于checklen
(16)。- 使用新的最大值调用该
StringBase<char>::Resize
函数。
调整大小功能:
这是我怀疑的问题。现在,我的问题变成了:
如何在 C++ 中重新分配内存而不触发 CRT 调试器中的内存泄漏?
构造函数:
析构函数:
赋值运算符:
附加功能:
请注意:我不想使用std::string
or std::vector
,我想修复这个功能。