Более того, эта же программа тоже работает после трансляции под Debian Sarge. А после перехода на Debian Etch после сборки и запуска программа вылетает с вышеуказанной ошибкой.
Путём установок операторов printf выяснилось следующее:
В одном модуле:
Код: Выделить всё
printf("Addr(WCP_ALL) = %p\n",&WCP_ALL);
WCP_ALL.ReadOutFile("PARAM_VTOR.param");
printf("Addr(WCP_ALL) = %p\n",&WCP_ALL);выдаёт:
Addr(WCP_ALL) = 0x81d84c7
После установки операторов печати в функцию :
Код: Выделить всё
void WRTE_ControlParam::ReadOutFile(char *SF) {
try {
ifstream is( SF );
if( is.is_open() ) {
is >> Header ; // Идентификатор пакета
printf(" Header = %u, &%p\n",Header,&Header);
is >> ALLPramVtor; // число бланков в структуре до 25
}
}
catch(...) {
puts(" Явная проблема -- Файл не был создан");
}
printf(" Header = %u, &%p\n",Header,&Header);
///// printf(" Addr(WRTE_ControlParam::ReadOutFile) = %p\n",&WRTE_ControlParam::ReadOutFile);
};Получается результат:
Header = 0, &0xbfe738c7
Header = 0, &0xbfe738c7
Addr(WCP_ALL) = 0x81d84c7
Ещё один интересный момент: Если раскомментировать строку печати (перед которой /////), то результат вывода получается следующий:
Header = 0, &0xbfd7bfc7
Header = 0, &0xbfd7bfc7
Addr(WRTE_ControlPramVtor_ALL::ReadOutFile) = 0x80b12dc
Addr(WCP_ALL) = 0xbfd7bfc7
Я ничего не понимаю. Автор программы уверяет, что придерживался стандарта языка.
В системе стоит компилятор gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
У меня как-то не укладывается в голове мысль, что причина может быть в нём и что компилятор версии 3.3 транслирует нормально.
И ещё такой момент: при трансляции большинства файлов выскакивает довольно много предупреждений типа:
Можно ли избавиться именно от этих предупреждений, если задан ключ -Wall ? (этот ключ я стал добавлять после того, как в конце комментария случайно оказался знак \ и следующая строка не компилировалась. А ни FARовский плагин расцветки, ни редактор миднайт командера не показывали, что следущая строка тоже закоментирована.