是有某种存储器限制的可执行(编写C)运行,没有问题?
-
22-07-2019 - |
题
im做一个项目,使用C,并CodeBlocks是我IDE。Windows Vista操作系统。我加入了一些新的东西已经工作的代码现在可执行的崩溃。我有没有错误之后汇编。计算机编程是不是我的领域,但我怀疑这可能与某种的记忆的局限性(如果存在,甚至有意义的).我这样说是因为我的工作有三个不同的3D矩阵/阵列方面:
- 1500x5x2
- 1500x5x12
- 1500x5x200
然后,我有另外两个1D阵列两个层面1500年。这是所有工作的罚款。
就开始崩溃的时候我加入另外三个2D矩阵/阵列所有维1500x5.如果我的评论的一些现有的矩阵,新的工作很好,但只有一个在一段时间。
(顺便说一句,所有上述矩阵的INT类型和确定了指针和callocs)
任何建议?
解决方案
有局限性平等,但是你3 3D矩阵仅使用一些MB RAM(刚刚超过6),所以我怀疑你打的限制给予那些。
如果刚开始崩溃的时候你加入其他的矩阵,我更怀疑你有记忆的分配/访问错误的指针确定的新的矩阵码你加入。
你怎么确定你的矩阵?
----编辑-
你应该尝试 调试在CodeBlocks.这应该告诉你到底在哪里你的崩溃是存在的。
其他提示
我不知道,这阵列可能会有负面的尺寸。
事实上,我相当肯定他们不能,作为一系列维是数量的项目计划放在它。
我建议你在学习如何使用你的IDE的调试器。我们真的没有什么要走呢。
是有某种存储器限制的可执行(编写C)运行,没有问题?
在一个32位的操作系统程序仅限于4G的存储器(小,实际上,但那是艰苦的上限),因为你的指尺寸是32位,并且只能参考4G有32位的指针。
这应该不是问题,但是,正如你最大的阵仅消耗少于6兆-即使你的实例几百这些阵列的你确定。
你很漂亮多了下的 标准的方式创建多层面的动态阵列中的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));
}
}
所以我想看看其他地方在你的代码。使用调试器。确保你的阵列的访问不会超出边界,或者治疗一系列元素为指针时,这是没有的。
-亚当
你能指定什么样的崩溃?
什么消息你好吗?
我引用一个以上的答案:
"我建议你在学习如何使用你的IDE的调试器。我们真的没有什么去呢。"
而不是猜测可能会导致使用该工具可用于缩小问题的特定行代码。
我们现在看到您的意见,那你已经解决了你的问题,但是在一般调试适当地是唯一的方式计划和时张贴的问题提供尽可能多的代码和详细信息作为可能的!