问题标签 [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 投票
6 回答
478 浏览

c++ - 这段代码不应该崩溃吗

由于内存空间不足,这段代码不应该崩溃。我已经尝试打印出 p 的值,即 p 的内存地址,它似乎在增加,但没有崩溃。

为什么会这样?

0 投票
11 回答
10673 浏览

c++ - 存储海量数据的数据结构?

在我的应用程序中,我必须从一组图像(MRC 图像)中加载体积数据并将像素数据保存在内存中。(图像是灰度的,因此每个像素一个字节)。

我的开发环境是 QT 框架,MinGW for Windows 和 GCC for Linux。

目前,我使用一个简单的数据结构将volumedata存储为:

并按如下方式进行大量分配。

以下是在给定平面中访问图像数据的重要方法,例如

使用我简单的数据结构,很容易实现上述方法。

但是将来我们可能需要采用 2000x2000x1000 (~3.7Gb) 的卷大小。而当前的数据结构将无法处理如此庞大的数据。

  1. 如何避免碎片化?现在,即使有 1000x1000x200 的数据,应用程序也会崩溃并给出 bad_alloc。为此更改数据结构的最佳方法是什么?我应该使用像链表这样的东西,每个块的大小为 100mb。

  2. 此外,用户应该能够对体积数据执行一些图像处理过滤器,并且还应该能够重置为原始像素值。这意味着,我应该保留两份卷数据。与当前的实现类似。

    无符号字符 *volumeDataOriginal;

    无符号字符 *volumeDataCurrent;

因此,对于 2000x2000x1000 数据范围,它将使用大约 8Gb(每个卷 4Gb)。但是在Win32中,地址空间是4GB。如何解决呢?我应该使用 64 位应用程序吗?

编辑:这是我的应用程序的快照 在此处输入图像描述

基本上,我加载体积数据(来自一组图像,来自 MRC 格式..等)并将它们显示在不同的平面查看器中(XY,YX,YZ.Image 显示 XY 平面查看器)。我需要保持在上面3 种数据访问方法在特定平面中显示图像。使用滑块用户可以更改要在所选平面中显示的图像)

提前致谢。

0 投票
5 回答
3125 浏览

c - 了解动态分配通过引用传递参数

我正在尝试了解如何在 C 语言中通过引用传递参数。所以我写了这段代码来测试参数传递的行为:

这里打印:

示例 2:

它打印:

这两个程序有什么区别?

0 投票
4 回答
805 浏览

c++ - Linux 上每个 C++ 函数需要内存使用工具

我正在寻找一个运行时内存调试器,能够在 Linux 上显示每个函数或 C++ 代码行的内存使用情况(不仅仅是泄漏)。我正在尝试追踪我的程序内存使用量的峰值。我使用了 Valgrind 和 Purify,发现没有泄漏。我预计,在那个峰值之后,内存使用量会回到我的程序的预期水平。

谢谢。

0 投票
4 回答
251 浏览

c - 使用递归程序计算矩阵行列式时发现的最奇怪的错误

请问有人能找到这个代码的错误吗?我尝试创建一个函数来计算矩阵 nXn 的行列式。该程序正常运行,但发生了“清醒”的事情。我声明了“char”类型的变量“ch”,我不再需要它了。但是,如果我删除此变量,则会发生执行错误。为什么?

0 投票
4 回答
24609 浏览

c - 在 C 中使用 malloc 为 typedef 类型分配空间

我不确定我需要使用什么作为参数来malloc在函数中分配空间table_allocate(int)。我只是想count_table* cTable = malloc(sizeof(count_table*)),但这对 size 参数没有任何作用。我应该为list_node_t也分配空间吗?下面是我正在使用的。

在 .h 文件中,我得到了这个签名:

这是我应该使用的结构:

0 投票
4 回答
938 浏览

c++ - `malloc` 和 `new` 之间的区别

可能重复:
new/delete 和 malloc/free 有什么区别?

有人可以修改/编辑下面的 - malloc 和 new 之间的区别 - 看看一切是否正确,或者我是否遗漏了什么或有什么问题?谢谢,

两者mallocnew用于动态内存分配。

malloc是 C 函数,而new是 C++ 运算符。

malloc动态分配内存时需要特殊的类型转换,new而不需要任何类型转换。

每当我们new用于分配内存时,它也会调用任何所需的构造函数,malloc而不会这样做。

mallocNULL如果内存耗尽,可能会失败并返回一个指针,而new从不返回 NULL 指针,而是通过抛出异常来指示失败。

使用malloc时,free是用于释放分配内存的 C 函数。

使用new时,delete是用于释放分配的内存并调用任何必需的析构函数的 C++ 运算符。

0 投票
4 回答
240 浏览

c++ - 是否可以将一段内存标记为“越界”,以便堆管理器不从中分配?

今天早些时候我问了这个问题

在花了一些时间调查这个问题之后,我发现了发生了什么。我将此作为一个新问题发布,因为我认为将其作为一个单独的问题进行跟踪很有趣。我将用答案更新该问题(以及指向此问题的链接)。

从调试器启动单元测试

从命令行启动单元测试

总之:

  • 从命令行启动单元测试时,后续调用new分配一个Object(在分配新deleteObject之前)总是在内存中返回相同的地址。
  • 调试器启动单元测试时,后续调用new分配一个Object(在分配新deleteObject之前分配前一个)总是返回内存中的唯一地址。

问题是,因为Object在通过命令行启动时分配总是在内存中获得相同的地址,所以我正在访问的已存储指针的映射仍然可以使用并且测试不会崩溃。但是我希望我的单元测试在缺陷修复不到位时崩溃,以确保它不会静默失败并且缺陷不会再次出现。

我的问题有两个部分:

  1. 为什么堆管理器会在从命令行启动单元测试时重用内存的同一部分,但在我从调试器启动单元测试时却不会?

  2. 是否有我可以在我的测试工具上使用的编译器设置,或者我可以调用的方法来防止堆管理器重新使用我已删除的一段内存,以允许我正确编写我的单元测试? 1


1显然,这样做的一种方法是不删除原始对象,但分配这个的部分代码在我的生产代码中,我这样做会导致内存泄漏。

0 投票
3 回答
312 浏览

c++ - 引用和指针有什么区别?

有人可以用非常简短的语言向我解释其中的区别吗?我从来没有理解这一点,并且在我目前的项目中非常困惑。我想要做的是修复这段代码:

现在我的编译器告诉我这是对局部变量的引用,但它不会让我将 toreturn 变成指针,因为它们在某种程度上与引用不同。然后,我还在研究一个集合类,它应该包含对抽象类对象的引用或指针。我完全糊涂了。任何帮助将非常感激。

0 投票
2 回答
116 浏览

c++ - 为什么这个函数会出现段错误?

功能是这样的:

变量 setArray 在我的标头中声明为 Multinumber 类型**

每当我用这个调用它时,它都会出现段错误:

c4 和 c5 已经被声明为指向正确类型的对象的指针。

任何帮助将非常感激。

编辑:下面的代码是 addElement 函数(为缩进道歉)

编辑:基于大量 cout 语句,错误似乎在这个函数中:

编辑:更改了数组索引,但仍然有段错误