2011-01-29 46 views
0

我宁愿不转储代码,但解释我的问题。经过几个小时的调试,我终于明白,在我的代码中,某个浮点值没有明确修改,变成了很大(超过1e15)。我在我的程序中使用了大量的内存(一个包含800多个单词的字符串数组),除此之外,我不知道可能会导致这种情况。浮动值突然变大

如果任何人有这方面的任何想法,请分享。否则,我会很快发布一个 代码的pastebin。

编辑: 这里是代码:http://pastebin.com/vgiZweNq。问题在于next_generation()函数,其中sumfit变量在循环中的随机时间变为坚果。

另外,我已经在linux上使用-fno-stack-limit-fstack-check编译过,以避免堆栈溢出。

编辑2: 我已经改变了程序使用动态分配链表,以进一步避免堆栈溢出。尽管如此,sumfit随机点更改为Floatzilla,通常很早。

干杯!

+2

如果你没有明确地触及变量,我们最好的猜测是一些内存管理错误。发布代码,今天水晶球朦胧。 – zoul 2011-01-29 11:39:46

回答

1

您使用的是CHROM阵列上的strcpy,但我看不出他们曾经得到空值终止。

也许我只是缺少它,但。

2

由于变量显然正在从一个意想不到的点修改,你可能要检查一些可能性:

  • 是它正在从不同的线程或中断/事件处理程序修改?如果是这样,访问是否正确同步以防止数据竞争?
  • 你正在做指针算术,可能是越野车,并导致访问目标缓冲区之外?
  • 你在不同大小的类型之间转换指针吗?
  • 尤其是如果您正在使用嵌入式设备:可能内存已满,堆栈与堆或全局变量重叠。有关平台

更多信息,发生这种情况的将是有益的。

0

你有一个巨大的字符串数组。我想你可能会结束它。跟踪进入该数组的数据的大小。