S
Serjio
Впервые столкнулся с очень странной ошибкой: при попытке чтения значения поля структуры, считывается значение из памяти соседней по отношению к нужному полю. Код примерно такой (сильно упрощенный вариант, потому что код не могу цитировать):
есть такая функция:
При выполнении функции func (после корректной инициализации - в pi записан адрес выделенной памяти, и аргумент функции тоже правильный) значение переменной р становится равным значению, хранящимся в памяти, следующей сразу после поля pi, т.е. например если поля pi хранится по адресу addr, то в переменную p записывается значение int из памяти addr+4. Причем наблюдаемая ошибка происходит далеко не во всех функциях наподобие func, т.е. к некоторых все считывается верно.
Все это происходит в солюшене под VS7.1, в солюшене 6 проектов, причем структуры S1 и S2 описаны в разных проектах, вызов функции func производится из третьего проекта (не знаю важно это или нет).
Не проверял точно ли это, но заметил, что в функциях из проекта, где описана S2, считавание происходит верно, в других - неверно, но повторюсь, конкретно во всех функциях солюшена не проверял, так что это не точно...
Есть подозрение что проблема связана с настройками проектов (конфигурации), именно поэтому решил поместить данный вопрос в этот раздел. Но сколько я не менял настройки, ничего не помогало...
Забыл сказать, все это реализовано с чистом С (все проекты один сплошной С).
Буду очень благодарен, если подскажете в чем дело! Потратил уже достаточно много рабочего времени и не смог справиться с этой проблемой...могу даже пиво поставить!
Код:
struct S1
{
[ др. поля.]
int *pi;
[ др. поля]
}
struct S2
{
[ др. поля.]
S1 m_S1;
[ др. поля]
}
есть такая функция:
Код:
void func(S2 *pS2)
{
int *p = pS2->m_S1.pi;
}
При выполнении функции func (после корректной инициализации - в pi записан адрес выделенной памяти, и аргумент функции тоже правильный) значение переменной р становится равным значению, хранящимся в памяти, следующей сразу после поля pi, т.е. например если поля pi хранится по адресу addr, то в переменную p записывается значение int из памяти addr+4. Причем наблюдаемая ошибка происходит далеко не во всех функциях наподобие func, т.е. к некоторых все считывается верно.
Все это происходит в солюшене под VS7.1, в солюшене 6 проектов, причем структуры S1 и S2 описаны в разных проектах, вызов функции func производится из третьего проекта (не знаю важно это или нет).
Не проверял точно ли это, но заметил, что в функциях из проекта, где описана S2, считавание происходит верно, в других - неверно, но повторюсь, конкретно во всех функциях солюшена не проверял, так что это не точно...
Есть подозрение что проблема связана с настройками проектов (конфигурации), именно поэтому решил поместить данный вопрос в этот раздел. Но сколько я не менял настройки, ничего не помогало...
Забыл сказать, все это реализовано с чистом С (все проекты один сплошной С).
Буду очень благодарен, если подскажете в чем дело! Потратил уже достаточно много рабочего времени и не смог справиться с этой проблемой...могу даже пиво поставить!