unsigned int * присваивание, изменяющее цель unsigned int - PullRequest
0 голосов
/ 24 марта 2011

Хорошо, это должно быть что-то глупое.Я столкнулся с этим, когда переместил какой-то код, и решил, что сделал опечатку или не смог правильно использовать отладчик.В качестве проверки работоспособности я создал этот тестовый пример, но он все еще не работает.

    unsigned int  vtxIdx = 0;
    unsigned int* tgtIdx;

    NSLog(@"Init %d", vtxIdx);

    tgtIdx = &vtxIdx;

    NSLog(@"After %d", vtxIdx);

    float* pVtx = new float[1000*3];

    NSLog(@"After more %d", vtxIdx);

Вывод:

2011-03-24 09:59:23.494 Game-iOS[] Init 0
2011-03-24 09:59:25.677 Game-iOS[] After 4
2011-03-24 09:59:31.828 Game-iOS[] After more 12

Редактировать:

Изначально меня удивило то, что я увидел странные значения в окне переменных XCode.Так что я не думаю, что это проблема NSLog, поскольку я вижу то же значение в XCode.Смотря vtxIdx в отладчике, он увеличивается на 4 с каждой инструкцией.

Весь этот код находится в файлах .mm, если это имеет значение.

1 Ответ

1 голос
/ 24 марта 2011

Для вашего второго оператора вывода вы получаете то же самое, если печатаете значения как vtxIdx, так и *tgtIdx?

Что-то меняется, если вы инициализируете tgtIdx = NULL;?

Если вы запускаете каждую NSLog функцию дважды подряд с одинаковыми аргументами, выводят ли они каждый раз одно и то же?

Вы упомянули отладчик в своем вопросе.Что вы видели, когда пошагово проходили через эту программу?

Редактировать: Еще несколько идей.

Что произойдет, если вы закомментируете строку tgtIdx = &vtxIdx;?

Что произойдет, если вы добавите строку unsigned int dummy; перед объявлениями существующих переменных?

Поскольку что-то, похоже, меняет переменную за вашей спиной, мои первые мысли связаны с повреждением памяти (некоторыедругой код непреднамеренно перезаписывает вашу переменную) или проблема со связыванием (компоновщик увидел вашу переменную и другую переменную с тем же именем, подумал, что это один и тот же объект, и объединил их вместе).Добавление объявления фиктивной переменной должно помочь указать, является ли проблема проблемой повреждения памяти, а переименование переменных должно проверить любые возможные конфликты разрешения имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...