Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> при записи в файл переполняется буфер 
:(
    Опции темы
Andrej78
Дата 15.3.2011, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 9.10.2006

Репутация: нет
Всего: нет



Доброго времени суток.

Никогда с таким не сталкивался, подскажите что делать и что это за буфер?
Написал ф-ию для записи в файл массива.
Код

void OutputTest(char *cFile, char delim)    //Выводит результаты теста в файл
{
    
    FILE *stream;
    errno_t err;    //переменая с результатом открытия файла
    char str[2000],tmpstr[2000];
    int jj=0,m=0,z=0,g=0;
    double OutputPrice=0;

    if( (err  = fopen_s( &stream, cFile, "a+" )) !=0 ) printf("Error N %i at saving %s\n", err,cFile);
    else 
    {    
        printf("Outputing test\n");
        fputs("MM/DD/YYYY;HH:MM:SS;O;H;L;C;EqL;EqS;EqL+EqS;EqL2;EqS2;EqL2+EqS2\n\0",stream);

        tmpstr[0]='\0'; str[0]='\0'; jj=0;
        for (long n=0;n<OutInstr.index-1;n++) {
            sprintf_s(tmpstr,"%i",Instr.z[Instr.index-1]->Month);   jj=SaveSmallString(tmpstr,str,jj,'/');    //дата открытия бара
            sprintf_s(tmpstr,"%i",Instr.z[Instr.index-1]->Day);   jj=SaveSmallString(tmpstr,str,jj,'/');
            sprintf_s(tmpstr,"%i",Instr.z[Instr.index-1]->Year);   jj=SaveSmallString(tmpstr,str,jj,delim);
            ...
            str[jj]='\n';str[++jj]='\0';
            for (int m=0;m<(int)strlen(str);m++) if (str[m]==OldRazr) str[m]=razr;    //меняю разряды в выходном файле чтобы корректно открывался в excel
            fputs(str,stream);
        }
        fclose(stream);
    }//else
}//OutputTest(char *cInFile, char delim)    //Выводит результаты теста в файл


Записывается 14 строк (всего 11 тыс. с чем-то), потом прога вылетает с ошибкой: В process_time_bars.exe возникло переполнение буфера, что привело к повреждению внутреннего состояния программы. Нажмите кнопку "Прервать", чтобы отладить программу, или кнопку "Продолжить", чтобы завершить программу.

Дополнительные сведения см. в разделе "Инструкции по отладке в случае переполнения буфера".

и показывает строчку из gsreport.c и затем dbghook.c где переполнился буфер. Без вывода в файл программа работает нормально (просто вывожу через принтф() на экран и "xxx.exe > 1.txt"

Да, использую динамические массивы, всего прога кушает примерно 400 Мб оперативки и почему-то стала работать медленнее начиная с какого-то объема памяти: подскажите плз в чем может быть дело? Логика проги не поменялась, просто выросли размеры массивов.

Это сообщение отредактировал(а) Andrej78 - 15.3.2011, 14:42
PM MAIL   Вверх
Andrej78
Дата 15.3.2011, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 9.10.2006

Репутация: нет
Всего: нет



Извиняюсь, кажется нашел ошибку.  
Просто вынес строчку с обнулением рабочей строки за тело цикла.

Однако второй вопрос остался: при увеличении размера динамических массивов прога стала работать гораздо медленнее. Из-за чего это может быть и как это исправить?

Может это связано с распределением памяти или с файлом подкачки?

Это сообщение отредактировал(а) Andrej78 - 15.3.2011, 14:54
PM MAIL   Вверх
Earnest
Дата 15.3.2011, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Я не вижу в приведенном коде никаких динамических массивов...


--------------------
...
PM   Вверх
Andrej78
Дата 24.3.2011, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 9.10.2006

Репутация: нет
Всего: нет



там просто был массив указателей на структуры, а элементы массивов уже создавались через new.

проблема похоже была не из-за памяти, а из-за совместного использования одного файла или из-за перегруза процессора (прога консольная - ест 50% мощности процессора, другая тоже хотела съесть около 70%, вот всё и тормозило).

там вроде разобрался, спасибо.

Это сообщение отредактировал(а) Andrej78 - 24.3.2011, 15:13
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.