Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [c++] Метод push_back класса vector библиотеки STL изменяем константную ссылку

Ответить
Настройки темы
C/C++ - [c++] Метод push_back класса vector библиотеки STL изменяем константную ссылку

Новый участник


Сообщения: 31
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день,

столкнулся с проблемой, происхождение которой решительно не могу понять. Исправить ситуацию вообщем-то несложно, но хотелось бы понять, как такое вообще произошло, потому что в моем понимании такое произойти не может вообще.
Вот фрагмент кода:

Код: Выделить весь код
//метод пользовательского класа, 
//ссылка filename_ создается непосредственно перед вызовом метода, 
//никаким образом не привязана к экземпляру класса
int MemoryManager::loadEmptyFile(const char* const filename_) {   
//смотрю дебагером значение filename_ - "с:\\testdir1\\serial.ind\0"
//адрес filename_ - :0012F8D0
char* temp=(char*)malloc(100);   
strcpy(temp,filename_);   
temp=strlwr(temp);   
FileInfo newfi;   //пустой конструктор
//далее идет большой фрагмент кода, но после того как я его закомментировал, 
//ничего не изенилось, так что пишу без него
/*Большой фрагмент кода*/
//в этом месте  filename_ - "с:\\testdir1\\serial.ind\0"
//адрес filename_ - :0012F8D0
//Из объявления класса MemoryManager: private: vector<FileInfo> files; 
files.push_back(newfi);
//в этом месте  filename_ - "\х13" 
//адрес filename_ - :0012F8D0 (тот же самый)
return newfi.mmid; 
}
Вот собственно и все. До выполнения files.push_back(newfi); значение filename_ было одним, а после выполнения стало другим, при этом переменная filename_ все ещё ссылается на ту же область памяти. Почему изменилось значение, хранимое по адресу, на который указывает filename_? Тем более если учитывать, что этот адрес для метода вроде должен быть const?
Ещё что интерестно, метод push_back объявлен так: void push_back ( const T& x );.
Т.е. и он вроде ничего вообще не должен менять кроме экземпляра самого вектора?

Вообще это dll библиотека, и метод вызывается из функции этой dll библиотеки. Но для тестирования используется простенькая программка, поэтому такая ситуация что переменную изменяет другой поток исполнения вроде бы исключена. Кроме того, ошибка возникает каждый раз.

В чем может быть проблема?

Отправлено: 18:51, 17-04-2009

 
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


как выглядит struct FileInfo? соделжит ли он указатели на память? ведётся ли потом изменение памяти по этим указателям? (напомню, что при копировании указателей, память, на которые они ссылаются - не копируется, то есть работа идёт с тем же куском памяти)

Отправлено: 22:23, 19-04-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [c++] Метод push_back класса vector библиотеки STL изменяем константную ссылку

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
C/C++ - STL Stack delight Программирование и базы данных 1 10-12-2009 07:37
C/C++ - STL .::.DIMA.::. Программирование и базы данных 3 23-04-2009 08:07
C/C++ - STL работа со стеком alextrs Программирование и базы данных 2 28-04-2008 18:41
heap @ c++ stl pva Программирование и базы данных 10 12-04-2005 15:58
STL и multimap Crew Программирование и базы данных 5 28-11-2004 18:23




 
Переход