代码之家  ›  专栏  ›  技术社区  ›  hfingler Jim Puls

在c++代码上出现了非常奇怪的错误。参数被复制为垃圾值,而不是我想要的值

  •  0
  • hfingler Jim Puls  · 技术社区  · 15 年前

    我想我无法解释我有多生气,因为我找不到我错过的地方。。

    图像可以解释一切:

    调试屏幕截图,使用nxxx值(用于调用它n,但那个糟糕的变量不值得这么酷的名称)。断点位于此方法的第一行。

    http://img202.imageshack.us/img202/5057/value.png

    调用方法的代码, getA getB 正在工作。。一切都在10分钟前就开始了。。

    第一个注释是方法签名,第二个注释是原始代码,应该可以工作。(已替换 n 变量 0 看看会不会改变什么。。结果没有)

    /*
        void HASAntData::init(float** A, 
            float** B, 
            int nxxx, 
            int R, 
            float q,
            float Q, 
            float q1, 
            float q2, 
            int S, 
            int maxrounds, 
            int nThreads, 
            int seed)
        */
    
        data->init( qap->getA(), 
                    qap->getB(), 
                    0, 
                    1, 
                    2, 
                    3, 
                    4, 
                    5, 
                    6, 
                    7, 
                    8, 
                    9);
    
        /*
        data->init( qap->getA(), 
                    qap->getB(), 
                    0, 
                    cudahas_R, 
                    cudahas_q, 
                    cudahas_Q, 
                    cudahas_q1, 
                    cudahas_q2, 
                    cudahas_S, 
                    cudahas_max_rounds, 
                    cudahas_m, 
                    Tools::randomInt(0, INT_MAX));
                    */
    

    编辑:

    这是一个包含所有变量值的表,交叉的那个对这个问题不重要。 看看有些变量是好的,有些是不好的

    http://img831.imageshack.us/img831/6224/valuestable.png

    2 回复  |  直到 15 年前
        1
  •  0
  •   lijie    15 年前

    看起来所有的值都已经移动了(Q是2而不是3,q1是3而不是4,R是0而不是1)。当int被解释为float时,会出现奇怪的值。

    我猜 nxxx 一定是看到了 B .

    的定义和声明是否不匹配 init ?

        2
  •  0
  •   Alex Budovski    15 年前

    使用优化的构建?如果是这样的话,可能会混淆调试器。

    否则,使用AppVerifier查找典型的内存损坏。