Вопрос № 95493: Доброго времени суток!
Продолжу тему STL.
Из ответов на мой предыдущий вопрос № 94826 я для себя выяснил,
что VC6+SP5 иногда некорректно работает с STL. Решил тогда я
создать dll-ку с нужной мне ф-цией в VC2005 или через gcc под Вин...Вопрос № 95498: Ув. эксперты(Шинтяков Дмитрий Васильевич), я вызываю рекурсию очень много раз и происходит переполнение стека
Вы сказали что объеи стека можно менять, как это можно сделать?
> Обычно объёма стека хватает, а вообще его можно менять...Вопрос № 95536: Всем удачи в работе!
У меня вопрос как считать из файла текс и вывести его на экран. Читал много инфы и на этом сайте тоже, но паровоз все там же. Подскажите где почитать или расскажите как правильно сделать.
У меня пока максимум, что удалось...
Вопрос № 95.493
Доброго времени суток!
Продолжу тему STL.
Из ответов на мой предыдущий вопрос № 94826 я для себя выяснил,
что VC6+SP5 иногда некорректно работает с STL. Решил тогда я
создать dll-ку с нужной мне ф-цией в VC2005 или через gcc под Винды.
(см. приложение) и подключить ее к проекту на VC6. Но пока ничего
не получилось. Эта схема не работает даже в VC2005, хотя если делать
все в одном файле - в VC2005 все работает.
Возможно я не учел какие-то тонкости VC2005 но ошибка выскакивает
при попытке освобождения памяти из кучи при удалении элемента списка.
С явной загрузкой библиотеки тоже проверял - тоже не работает.
Спасибо за ответы.
Приложение:
Отправлен: 17.07.2007, 23:41
Вопрос задал: kool (статус: Практикант)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Ilkras
Здравствуйте, kool!
Первое, что приходит на ум - сравните headers использованные в библиотеке с 2005. Если есть отличие в определении типа string, то очевидно объект созданый в приложении будет иметь размер отличный от объекта созданого в библиотеке.
Кроме того непонятна "неявность загрузки". В аппликации должен быть включен header вашей библиотеки и она должна быть добавлена к списку линкуемых библиотек.
Ответ отправил: Ilkras (статус: Студент)
Ответ отправлен: 18.07.2007, 00:08
Вопрос № 95.498
Ув. эксперты(Шинтяков Дмитрий Васильевич), я вызываю рекурсию очень много раз и происходит переполнение стека
Вы сказали что объеи стека можно менять, как это можно сделать?
> Обычно объёма стека хватает, а вообще его можно менять
Отправлен: 18.07.2007, 01:43
Вопрос задала: Mikolis (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 4)
Отвечает: Maxim V.G.
Здравствуйте, Mikolis!
Изменить размер (объём) стека на сколько я знаю менять нельзя. Если не хватает памяти для выполнения рекурсии то надо использовать динамическую память. Например на каждой итерации рекурсии выделять памяти для переменной (ных), а по завершении итерации освобождать. Освобождать обязательно, а то вместо переполнения стека получится "переполнения" памяти :).
--------- Жить вредно - от неё умирают
Ответ отправил: Maxim V.G. (статус: 3-ий класс)
Ответ отправлен: 18.07.2007, 03:27 Оценка за ответ: 2 Комментарий оценки: спасибо за внимание и за хороший совет!
Отвечает: Богаткин Станислав Евгеньевич
Здравствуйте, Mikolis!
Извините, если для Вас это будет неприемлемо, но я бы очень не советовал Вам использовать рекурсию в Ваших программах. Все дело в том, использование рекурсии с сохранением данных в стеке "отъедает" очень много памяти. Попробуйте использовать сохранение членов/объектов, сохраняемых при рекурсии, например, в динамический массив данных.
Ответ отправил: Богаткин Станислав Евгеньевич (статус: 2-ой класс)
Ответ отправлен: 18.07.2007, 14:57 Оценка за ответ: 2 Комментарий оценки: спасибо за внимание и за совет, я так и собиралась поступать так как другого выхода пока не нашла!
Вопрос № 95.536
Всем удачи в работе!
У меня вопрос как считать из файла текс и вывести его на экран. Читал много инфы и на этом сайте тоже, но паровоз все там же. Подскажите где почитать или расскажите как правильно сделать.
У меня пока максимум, что удалось сделать это получит из текстового документа первое слово
HELP!!!
Приложение:
Отправлен: 18.07.2007, 11:50
Вопрос задал: Solowey (статус: 2-ой класс)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Stv
Здравствуйте, Solowey!
Вот код,который читает содержимое файла и выводит прочитанное содержимое на консоль.
Приложение:
Ответ отправила: Stv (статус: 1-ый класс)
Ответ отправлен: 18.07.2007, 12:01
Отвечает: Sema
Здравствуйте, Solowey!
попробуй вот такой вариант
у меня "===" - последняя строка в файле
можно попробовать еще и while (fgets( line, 256, stream )){
if( (stream = fopen( fPathName, "r+" )) != NULL ){
while (fgets( line, 256, stream ) != "==="){
/*...........................*/
}
fclose( stream );
}
Ответ отправил: Sema (статус: 2-ой класс)
Ответ отправлен: 18.07.2007, 16:55
Отвечает: Терсков Сергей
Здравствуйте, Solowey!
Самое странное что вы хотя бы одно слово прочитали из файла. Вот здесь :
ifstream f("Test.txt");
if ( !f.bad() )
{
cout << "ERROR! File no open" << endl;
f.close();
}
при корректном открытие файла условие (!f.bad()) дает true и файл закрывается. Хотя действительно оператором >> вы считаете только одно слово, но до него файл в открытом состоянии не дойдет... Поэтому файл вам нужно считывать либо посимвольно (f.get()) либо построчно (getline()).
И вообще по работе с файлами на С++ литературы много. В любом нормальном самоучителе по С++ должен быть подобный раздел...
Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 19.07.2007, 03:05