问题标签 [dynamic-memory-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.

0 投票
4 回答
2168 浏览

c++ - C++ 动态分配的静态维度数组数组

我需要创建一个包含可变数量'char[2]'的结构,即2个字符的静态数组。

我的问题是,如何为 x 个字符 [2] 分配内存。

我试过这个(假设 int x 已定义):

(它没有工作)

我意识到我可以使用 std::vector<char[2]> 作为容器,但我很好奇如何使用原始指针来完成。

我对 C++ 很陌生,正在努力学习。

0 投票
4 回答
225 浏览

c++ - 如何在 C++ 中释放动态分配的数组?

我知道你必须这样做:

现在我的问题是:由于没有明确说明,如何释放正确的内存量?操作系统是否跟踪分配的内存及其起始地址?

0 投票
10 回答
30968 浏览

c - 你能在 C 运行时定义数组的大小吗

C新手,非常感谢您的帮助。

是否可以在 C 中定义一个数组而不指定其大小或初始化它。

例如,我可以提示用户输入数字并将它们存储在 int 数组中吗?我不知道他们会预先输入多少个数字。

我现在能想到的唯一方法是定义最大尺寸,这不是一个理想的解决方案......

0 投票
4 回答
2138 浏览

c++ - VC++ 中的动态数组大小和动态数组分配器

在编写自己的小型发现程序以清除 Visual C++ 如何为动态数组分配内存时,我感到有些困惑。我必须指出,我从未遇到过技术文档描述了任何 C++ 实现的 new[]/delete[] 运算符的这个问题。

最初我认为如果将 new[] 和 delete[] 解释为简单的 C,则类似于以下内容:

此代码意味着动态数组的以下结构:

我的 VC++ 编译器生成了产生以下输出的程序:

显然,在这种情况下一切都很好。但是现在当我试图发现“本机”VC++ 动态数组分配器的本质时,我明白我错了(至少对于 VC++)。所以我有几个问题。动态数组大小的值存储在哪里?动态数组分配器如何工作?他们将哪种逐字节结构用于动态数组?或者...或者您能否提供任何可以为我澄清这一点的链接(VC++ 具有最高优先级),好吗?

0 投票
3 回答
1370 浏览

c++ - 使用堆栈分配的对象将异构对象存储在向量中

使用堆栈分配的对象将对象存储在异构向量中

你好,

假设我有一个抽象类 CA,派生到 CA1、CA2 和其他可能。

我想将这些派生类型的对象放入一个向量中,并将其嵌入到一个类 CB 中。为了获得正确的多态性,我需要存储一个指针向量:

现在,假设我有以下主要功能:

如何void CB::Store(const CA&)以简单的方式编写该方法,以便在原始对象被破坏时存储的对象仍然存在(在上面的简单示例中不会发生)。

我的问题是我需要先复制堆上的对象,然后再将它们的地址复制到向量中,但是如何创建派生类型的对象?当然,我可以使用 RTTI,搜索所有可能的类型,创建和分配指针,然后将对象复制(通过适当的转换)到分配的空间,然后再将其推入向量。但这似乎很复杂,不是吗?

有没有更简单的方法?

(并且主要不使用动态分配!)

0 投票
3 回答
8316 浏览

c++ - 在 C++ 中存储未知大小的数据

我已经使用 PHP 大约 4 年了,但是我遇到了一个需要稍微 (:P) 更好的性能的问题,所以我选择了 C++。

我正在编写的程序是一个 Linux 守护程序,它将扫描 MySQL 数据库以加载 URL,使用 cURL 加载它们,搜索指定的字符串,然后相应地更新数据库。我面临的问题是我不知道需要存储在变量中以便搜索特定字符串的数据的大小。

我有使用链表并在数据填充列表时分配更多节点的想法。这是做事的好方法吗?

提前致谢,

0 投票
2 回答
190 浏览

qt - 指针不会返回分配的地址

我正在将Qt Creator 4.5 与GCC 4.3 一起使用,我遇到了以下问题,我不确定Qt或 C++ 是否相关:我调用一个带有 achar *作为输入参数的函数。在该函数内部,我进行了动态分配,并将地址分配给char *. 问题是当函数返回时它不再指向这个地址。

当我返回指针时,它包含的地址与分配的地址完全不同putDatagrams()。为什么?
...

好的,我理解我的错误(新手错误:()。当将指针作为输入参数发送给函数时,您发送数据的地址而不是指针的地址,因此您不能将指针指向其他地方......它实际上是像 Index 这样的本地副本。使用 char * 成功返回数据的唯一情况是在函数调用之前分配内存:

0 投票
4 回答
41615 浏览

c - 2D 和 3D 数组的动态分配/解除分配

我知道动态分配/取消分配 2D 数组的算法,但是对于 3D 数组我不太确定。
使用这些知识和一点对称性,我想出了以下代码。
(在编码过程中,我很难以 3D 形式进行可视化)。

请评论正确性并建议任何更好的替代方案(效率方面或直观),如果有的话。
另外,我认为这些 2D 和 3D 数组都可以像 arr2D[2][3] 和
arr3D[2][3][2] 等静态数组一样正常访问。对?

二维码

3D 代码

0 投票
3 回答
628 浏览

c++ - 分配没有 new[] 的 Derived 数组:指向 Base vtable 的指针不好

基本上,我有一个纯虚拟类 Base,以及一个继承自 Base 的具体类 Derived。然后我分配一块内存并通过简单的转换将其视为 Derived 数组。然后,我使用 = 填充数组。最后,我循环遍历数组,尝试调用在 Base 中声明并在 Derived 中定义的虚方法 GetIndex。

问题是我最终得到一个访问冲突异常,试图读取指向 Base 的 vtable 的指针(在 Visual Studio 调试中,这显示为 __vfptr,它始终为 0xbaadf00d)。

以下是我遇到的问题的一个简单示例:

此行为仅在通过 HeapAlloc 或 malloc 分配内存时发生;如果使用 new[],它工作正常。(此外,之前调用了 4 次 cstor,因此输出为 4 5 6 7。)

0 投票
1 回答
991 浏览

c - 在C中通过引用传递二维动态分配的双数组

我正在尝试将我的字符串转换为双精度的动态数组。我的字符串的每个空格代表一列,每个“;” 代表一个新行。此代码运行时,仅适用于 *F[0][col] 时。当它到达 *F[1][col] 时,它给了我错误“CCode.exe 中 0x00e4483c 处的未处理异常:0xC0000005:访问冲突读取位置 0xcccccccc。” 有谁知道为什么?