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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Run-Time Check Failure #2 
V
    Опции темы
PascalC
Дата 17.6.2009, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Подскажите пожалуйста, в чем может быть ошибка, компилируется нормально, но при запуске вылазит:
Run-Time Check Failure #2- Stack around the variable 'sp' was corrupted
Выяснил что ругается вот из-за этого куска:
Код

void main()
{
...
int n;
char *sp;
FILE *f,*fr;
...
fr=fopen("c:\\Ascii\\EUR-10.txt","r+");
while (!feof(fr))
    {
    fscanf(fr,"%s",&sp);
    n++;
    }
...
}

При том программа выполняет все что мне нужно.
Добавил в конец кода exit(0); и ошибка не выдается smile Но сам понимаю, что это не выход.

Сам участок кода считает сколько строк в файле

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


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(PascalC @  17.6.2009,  21:33 Найти цитируемый пост)
char 0*sp;

первый раз такое вижу  smile 
интересно smile


--------------------
PM MAIL   Вверх
PascalC
Дата 17.6.2009, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(zim22 @  17.6.2009,  21:42 Найти цитируемый пост)
Цитата(PascalC @  17.6.2009,  21:33 Найти цитируемый пост)
char 0*sp;

первый раз такое вижу  smile 
интересно smile 

извиняюсь,  опечатка когда в посту все лишнее затирал
PM MAIL   Вверх
Alexeis
Дата 17.6.2009, 22:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



  память под sp выделяется?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Earnest
Дата 18.6.2009, 08:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Читаешь не пойми куда и портишь память.
Должно быть так:

Код

   char sp[MAXBUF];   // ну или динамически ее выделяй
   fscanf (fr,"%s", sp);



--------------------
...
PM   Вверх
PascalC
Дата 18.6.2009, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Alexeis @  17.6.2009,  22:07 Найти цитируемый пост)
 память под sp выделяется? 

все что связано с sp вынесено сюда.
память не выделял, сделал выделение и очистку:
Код

sp=new char[255];
FILE *f,*fr;
fr=fopen("c:\\Ascii\\EUR-10.txt","r+");
while (!feof(fr))
    {
    fscanf(fr,"%s",&sp);
    n++;
    }
fclose(fr);
if (sp!=NULL) delete []sp;

Теперь пишет ошибку выхода за пределы буфура:
A buffer overrun has occurred in oscillator.exe which has corrupted the program's internal state. Press Break to debug the program or Continue to terminate the program.

For more details please see Help topic 'How to debug Buffer Overrun Issues'.

Добавлено через 5 минут и 44 секунды
Цитата(Earnest @  18.6.2009,  08:21 Найти цитируемый пост)
Должно быть так:

Все работает, большое спасибо
PM MAIL   Вверх
Alexeis
Дата 18.6.2009, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(PascalC @  18.6.2009,  07:23 Найти цитируемый пост)
Теперь пишет ошибку выхода за пределы буфура:
A buffer overrun has occurred in oscillator.exe which has corrupted the program's internal state. Press Break to debug the program or Continue to terminate the program.

  Боюсь что строка длиннее чем выделенные 255 символов. С этим нужно быть внимательным. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
xvr
Дата 18.6.2009, 12:37 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



В строке 6 символ '&' перед sp не нужен:
Код

    fscanf(fr,"%s",sp);
Ты вместо того, что бы читать строку в выделенную память читаешь ее поверх указателя и стека вокруг него

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.0786 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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