【发布时间】:2014-11-28 13:40:14
【问题描述】:
为了处理图形,我需要一个无符号字符数组。它必须是 3 维的,第一个维度的大小为 4,(第 1 字节蓝色,第 2 字节绿色,第 3 字节红色,第 4 字节未使用)。一个 640x480 图像的简单数组是这样完成的:
unsigned char Pixels[4][640][480]
但问题是,它总是在程序运行时立即崩溃。它编译得很好。它链接良好。它没有错误或警告。但是当它运行时它立即崩溃。我还有许多其他代码行,但我发现正是这一行导致了立即崩溃。这并不是说我没有足够的 RAM 来保存这些数据。这只是很小的数据量,仅够一张 640x480 全彩图像。但是我以前只看到过这样的直接崩溃,当程序尝试读取或写入未分配的内存时(例如使用 CopyMemory API 函数,其中源或目标部分或完全在已定义变量的内存空间之外)。但这不是这样的内存读取或写入操作。这是一个内存分配操作。这永远不会失败,除非 PC 中没有足够的 RAM。而且我的电脑当然有足够的内存(没有现代电脑没有足够的内存)。有人能告诉我为什么会搞砸吗?这是 VC++ 6.0 的一个众所周知的问题吗?
【问题讨论】:
-
与VC++ 6.0无关。堆栈内存非常有限,在堆上分配(我建议为此使用向量,您可以将其包装起来为您处理索引)。
-
如果您要移植应用程序,为什么不尝试使用更新的 VC6 编译器?
-
请显示您用于创建此内存的完整真实代码。
-
您提供的代码无法编译,因为它缺少分号。这可能看起来很迂腐,但确切地知道内存是如何声明的对于诊断这个问题很重要。您似乎认为您不需要了解 C++ 中的内存是如何分配的。你会的。
-
@BenHutchinson:VB 和 C++ 是非常不同的语言,越早停止尝试将 VB 知识应用于 C++ 越好。
标签: c++ arrays visual-c++ memory unsigned-char