Параметр функции случайно дублирует адрес указателя другого параметра? - PullRequest
0 голосов
/ 12 октября 2011

Сегодня я столкнулся с довольно странной ошибкой. По сути, то, что происходит, находится внутри функции foo, первый параметр которой устанавливается на значение указателя указателя crosssegments. Скажем, crosssegments - это местоположение в 0x0045, тогда iMeaninglessdata будет установлено в 0x0045. Если я уберу iMeaninglessData и просто в качестве первого параметра выберу o1, то o1 будет равно 0x0045. Если я сделаю паузу в отладчике до вызова функции iMeaningless data и crosssegments имеют разные адреса указателя.

void Foo(int *iMeaninglessData, handle o1, handle o2, handle o3, int iHeight, int iProfileHeight, handle o4, std::vector<object> * crossSegments, int *iProfileArray)
{
    //...code
}

Вот как я вызываю функцию:

std::vector<FormSummary> * crossSegmentsTop = new std::vector<FormSummary>();
int iZero = 0;
Foo(&iZero, o1, o2, o3, 10, 50, o4, crossSegmentsTop, iProfileArray);

Я очень смущен тем, как это может происходить. Как вы думаете, что-то могло случиться со стеком?

Спасибо,

  • Alikar

1 Ответ

0 голосов
/ 13 октября 2011

Оказывается, это ошибка в отладчике Visual Studio 2008 при использовании режима выпуска или режима отладки.Я генерирую файл PDB, но, очевидно, до тех пор, пока вы не используете значение, например в командном окне, он не может правильно найти указатель на переменную.

...