ДЕЙСТВИТЕЛЬНО странная ошибка в коде c ++.Параметр копируется со значением корзины, а не тем, который я хотел - PullRequest
0 голосов
/ 25 ноября 2010

Не думаю, что смогу объяснить, насколько я зол, потому что я не могу найти, где я здесь упустил ..

Изображения могут объяснить все:

Отладочный скриншот со значением 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));
                */

edit:

Вот таблица со всеми значениями переменнойСкрещенный не имеет значения для этой проблемы.Посмотрите, как некоторые переменные в порядке, а некоторые нет

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

Ответы [ 2 ]

0 голосов
/ 25 ноября 2010

Похоже, что все значения сместились (Q равно 2 вместо 3, q1 равно 3 вместо 4, R равно 0 вместо 1).Там, где int интерпретируется как float, ожидаются странные значения.

Я полагаю, nxxx должно видеть значение, предназначенное для B.

Есть ли какое-то несоответствие между определением и объявлениемinit?

0 голосов
/ 25 ноября 2010

Используете оптимизированную сборку?Если это так, это может запутать отладчик.

В противном случае используйте AppVerifier для поиска типичных повреждений памяти.

...