char *LoadTextFromFile(const char *filename) //тут глюк!!!!
{
char *src=0, tmp;
unsigned long int filelen=0;
FILE *file = fopen(filename, "rt");
if(file==0)
return 0;
while( fscanf(file, "%c", &tmp)!=EOF ) filelen++; // щитаем длинну файла
fseek(file, SEEK_SET, 0);
//MessageBox(0,"char", "char", 16);
src=new char[filelen+1]; // создаем строку по длинне файла
//MessageBox(0,"2222", "2222", 16);
for(unsigned i=0; i<filelen; i++) fscanf(file, "%c", &src); // читаем файл
src[filelen]=0;
fclose(file);
return src;
}
"Debug" работает а "Release" нет
Причем если запускать Debug-экзешник то с ним все норм. Я так понимаю от самой программы это не зависит - так у меня со всеми другими прогами... Даже если не лезть в настройки и юзать автоматически генерированый "блабла.vcproj"...
Скажите пожалуйста, кто то встречался с такой глюконафтией?
Баг у вас гдет-то. Чтение по кривому указателю. Если работает в дебаге и не работает в релизе - 100% баг в проге.
Попробуй создать лог.. По нему выяснишь где косяк.. 100% ты что намутил с указателями..
По виду вполне работоспособный код - загрузка всего текста из текстового файла и юзание его в проге. Может на более опытный взгляд ошибка будет виднее? Глянте, если не трудно плз...
Код:
Цитата: 0xf001
while( fscanf(file, "%c", &tmp)!=EOF ) filelen++; // щитаем длинну
Цитата: 0xf001
fscanf(file, "%c", &src); // читаем файл
>:E Зачем такой изврат? Исли просто символы читаешь - так и читай обычно босимвольно, хоть fgetc если именно на С пишешь. Это в первом случае, хотя ведь размер можно и так узнать.
Ну а во втором случае, раз уж известен размер файла, тут уж само напрашивается считать сразу все в строку за один раз через fread например. )
Да не в изврате дело, а в том что ошибка происходит при выделении памяти оператором new
Гы!!! Стопудняк filelen <= 0. Если под дебагом проходит, а при двойном клике на файле - нет, проверь путь к файлу. Рабочая папка-то меняется, следовательно, относительные пути могут стать невалидными.
(не знаю как в MSVC, а для BCB этот способ значительно упрощает ловлю блох)
Ещё можно включить "релиз", а потом вручную активировать одну-две отладочные опции (контрольные точки) - вполне возможно, проблема возникает после оптимизации кода
А проверяется ли значение возвращенное из LoadFrom... на NULL?
В общем ставлю "Run-time library" на "Multi treated Debug" вместо просто "Multi treated" и вроде работает..
Что и когда возвращает функция я понял :/ Вопрос в другом, проверяешь ли ты, что она возвращает, или есть место где используется NULL?
В качестве имени файла попробуй передавать полный путь (вида С:\\папка\\...)
смущает вызов fseek(file, SEEK_SET, 0); По-моему ты перепутал аргументы. (SEEK_SET должен идти последним)
да и вообще, в этом случае, проще использовать GetFileSize/ReadFile.
И проще и быстрее.