Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Run-Time Check Failure #2


Автор: PascalC 17.6.2009, 21:33
Подскажите пожалуйста, в чем может быть ошибка, компилируется нормально, но при запуске вылазит:
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 Но сам понимаю, что это не выход.

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

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

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

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

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

извиняюсь,  опечатка когда в посту все лишнее затирал

Автор: Alexeis 17.6.2009, 22:07
  память под sp выделяется?

Автор: Earnest 18.6.2009, 08:21
Читаешь не пойми куда и портишь память.
Должно быть так:

Код

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

Автор: PascalC 18.6.2009, 08:23
Цитата(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 Найти цитируемый пост)
Должно быть так:

Все работает, большое спасибо

Автор: Alexeis 18.6.2009, 09:13
Цитата(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 символов. С этим нужно быть внимательным. 

Автор: xvr 18.6.2009, 12:37
В строке 6 символ '&' перед sp не нужен:
Код

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)