Member 13501090 Ответов: 1

Ошибка сегментации, я не знаю почему?


Привет, ребята, может ли кто-нибудь помочь мне, моя программа скребется, и когда я отлаживаю ее, она принимает "ошибку сегментации SIGSEGV" и показывает мне мое окно процессора. Это происходит только в Dev-C++, в visual studio это идет хорошо, но я хочу, чтобы это было сделано в Dev-C++. Курсор в отладке остается на строке 30 (str2[k] = str1[j];). У меня 32-битная ОС.
Спасибо за помощь.

<pre lang="c#">
#include <stdio.h>
#include <string.h>

//príklad 2

int main()

{
	FILE *fr,*fw;
	int c,i=0,k=0,f = 0;
	char str1[50];
	char str2[50];
	
	fr = fopen ("vstup.txt","r");
	fw = fopen ("vystup.txt","w");
	while ((c=getc(fr)) != EOF){
		str1[i] = c;
		i++;
	}
	str1[i]= '\0';
	fclose (fr);
	printf("%s",str1); 
	i=0;
	while (str1[i] != EOF)
	{		
		if(str1[i] == '\n')	
		{	
			for (int j=i-1;j>=f;j--)
			{
				str2[k] = str1[j];
				k++;
			}
			f = i+1;
			str2[k] = '\n';
			k++;
		}
		i++;
	}
	str2[k] = '\0';
	
	fprintf(fw,"%s",str2);
	fclose (fw);
	return 0;
}


Что я уже пробовал:

Потому что я немного новичок в программировании, я не знал об этой ошибке(в первый раз, когда я ее получаю), я знаю, что это что-то с memmory acces и т. д.

1 Ответов

Рейтинг:
8

CPallini

Цитата:
while (str1[i] != EOF)
Очень маловероятно, что цикл закончится (вы не сохранили EOF в str1).


И ты тоже
  • Следите за количеством прочитанных символов, скажем count
    и используйте его в состоянии остановки цикла.
или
  • Измените условие остановки на (str1[i] != '\0').