1

我正在使用 C 做一个项目,而 CodeBlocks 是我的 IDE。Windows Vista 是操作系统。我在已经工作的代码中添加了一些新东西,现在可执行文件每次都崩溃。我编译后没有错误。计算机和编程不是我的领域,但我怀疑它可能与某种内存限制有关(如果存在并且甚至有意义的话)。我这样说是因为我正在使用三个不同的 3D 矩阵/维度数组:

  • 1500x5x2
  • 1500x5x12
  • 1500x5x200

然后我有另外两个维度为 1500 的一维数组。这一切都很好。

当我添加另外三个维度为 1500x5 的二​​维矩阵/数组时,它开始崩溃。如果我评论一些现有的矩阵,新的矩阵可以正常工作,但一次只有一个。

(顺便说一句,上面提到的所有矩阵都是 INT 类型,并且是用指针和 callocs 定义的)

有什么建议么?

4

5 回答 5

6

平台等存在限制,但您的 3 个 3D 矩阵仅使用几 MB 的 RAM(刚刚超过 6 个),所以我怀疑您是否达到了这些限制。

如果在您添加其他矩阵时它刚刚开始崩溃,我会更加怀疑您在定义您添加的新矩阵代码的指针上存在内存分配/访问错误。

你如何定义你的矩阵?

- - 编辑 - -

您应该尝试在 CodeBlocks 中进行调试。这应该可以准确地告诉您崩溃发生的位置。

于 2009-03-13T17:14:32.770 回答
1

我不知道数组可能有负维度。

事实上,我相当肯定他们不能,因为数组维度是您计划放入其中的项目数。

于 2009-03-13T17:25:21.057 回答
0

我建议您学习如何使用 IDE 的调试器。我们真的没有任何事情要做。

于 2009-03-13T17:23:36.630 回答
0

可执行文件(用 C 编写)是否有某种内存限制才能正常运行?

在 32 位操作系统上,您的程序被限制为 4GB 内存(实际上更少,但这是硬上限),因为您的指针大小是 32 位,并且您只能使用 32 位指针引用 4GB。

不过,这不应该是问题,因为您最大的数组只消耗不到 6MB - 即使您实例化了数百个这样的数组,您也可以。

您几乎遵循在 C 中创建动态多维数组的标准方法

int *** layer=calloc(lines, sizeof(int **));
for(i=0;i<lines;i++)
{ 
   layer[i]=calloc(columns, sizeof(int*));
   for(j=0;j<columns;j++) 
   { 
     layer[i][j]=calloc(hight, sizeof(int));
   }
}

所以我会在你的代码中寻找其他地方。使用调试器。确保您的数组访问不会超出范围,或者在没有超出范围时将数组元素视为指针。

-亚当

于 2009-03-13T18:13:34.577 回答
0

你能指定什么样的崩溃?

你收到什么信息?

我在上面引用一个答案:

“我建议你学习如何使用 IDE 的调试器。我们真的没有任何事情要做。”

不要猜测可能的原因,而是使用可用的工具将问题缩小到特定的代码行。

我现在在您的评论中看到您已经解决了您的问题,但通常正确调试是编程的唯一方法,并且在发布问题时提供尽可能多的代码和细节!

于 2009-08-26T16:27:00.750 回答