officialandrey
@officialandrey

Как исправить ошибку?

Программа работает нормально. Читает из файла, записывает, все ОК.
Но в конце вылазит ошибка:
5bd6fc7c7ed26336145471.png

Если нужны функции работы с списком, могу скинуть.

Вот код:
cryption(char *word) {
	int i;
	char ch;

	for (i = 0; i < strlen(word); i++) {
		ch = word[i];
		if ((ch >= 'A') && (ch <= 'z'))
			ch += 1;
		word[i] = ch;
	}
	
	return word;
}

int main() {
	FILE *GE, *DE, *EN;
	PNODE nd;
	PDLIST lst;
	char word[10];
	char ch;
	int select, key, i;

	GE = fopen("general.txt", "r+");
	DE = fopen("decryption.txt", "r+");
	EN = fopen("encryption.txt", "r+");

	lst = (PDLIST)malloc(sizeof(DLIST));
	initList(lst);

	printf("Entry 1 or 2\n\n1) Encryption\n2) Decryption\n");
	scanf("%d", &select);

	switch (select) {
	case 1: {
		for (i = 0; !feof(GE); i++) {
			fscanf(GE, "%s", word);
			if (cryption(word)) {
				nd = (PNODE)malloc(sizeof(NODE));
				nd->info = (char*)malloc(sizeof(char) * strlen(word) + 2);
				strcpy(nd->info, word);
				nd->key = (i + 1);
				addRight(lst, nd);
			}
		}
		fPrintEN(lst, EN);
	}break;
  • Вопрос задан
  • 132 просмотра
Пригласить эксперта
Ответы на вопрос 1
У вас классическое переполнение стекового буфера (stack buffer overflow aka buffer overrun).
https://en.wikipedia.org/wiki/Stack_buffer_overflow

Вы не проверяете результат fopen и fscanf() и не контролируете длину данных, считываемых в буфер word фиксированного размера. В данном случае либо fscanf ничего не может считать, и в cryption() вы пытаетесь шифровать мусор, который не заканчивается нулевым байтом, что приводит к переполнению буфера word либо считывается более 10 байт, из-за чего переполняется буфер word. Поскольку буфер объявлен в локальных переменных функции, это приводит к повреждению стека.

Всегда контролируйте возврат из функции (fopen(), scanf(), fscanf(), malloc() в вашем случае) + ограничьте размер вводимой строки размером буфера через форматный спецификатор ("%9s" например)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 22:03
3000 руб./за проект
23 нояб. 2024, в 21:53
30000 руб./за проект
23 нояб. 2024, в 21:49
1000 руб./в час