У меня есть документ country.txt, в котором перечислены названия стран на испанском sh языке. Это означает, что есть символы «´» и «ñ», например.
У меня есть небольшая функция, которую я использую для подсчета строк в документе, которая изначально была сделана с помощью функции fgets()
, и я отредактировал его так, что он использует fgetws()
, так как я понимаю, что специальные переменные должны храниться в wchar_t
переменных.
int linesCount = 0;
wchar_t line[MAX_SIZE];
while(fgetws(line, sizeof(line), f) != NULL){
linesCount++;
}
rewind(f);
return linesCount;
}
1) Если функция находит строку, содержащую «´», программа вылетает , 2) Если не найдено никаких специальных символов, valgrind обнаруживает гораздо больше утечек памяти вместо 1, если есть хотя бы один специальный символ, такой как «ñ».
Это основной:
int main (void)
{
setlocale(LC_ALL, "spanish");
countries = fopen("countries.txt", "r");
int counCount = count_lines(countries);
fclose(countries);
}
Это первая часть страны. прикрепить ошибку, показывает valgrind:
1 errors in context 1 of 1:
==16211== Conditional jump or move depends on uninitialised value(s)
==16211== at 0x4FCB443: __wmemchr_avx2 (memchr-avx2.S:97)
==16211== by 0x4EBE164: _IO_getwline_info (iogetwline.c:86)
==16211== by 0x4EBDD2C: fgetws (iofgetws.c:53)
==16211== by 0x108BC3: count_lines (people_generator.c:10)
==16211== by 0x108B3C: main (main.c:15)
==16211== Uninitialised value was created by a heap allocation
==16211== at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==16211== by 0x4EBB858: _IO_wfile_doallocate (wfiledoalloc.c:79)
==16211== by 0x4ECA378: _IO_doallocbuf (genops.c:365)
==16211== by 0x4EC172B: _IO_wfile_underflow (wfileops.c:179)
==16211== by 0x4EBF691: _IO_wdefault_uflow (wgenops.c:204)
==16211== by 0x4EBE1C0: _IO_getwline_info (iogetwline.c:61)
==16211== by 0x4EBDD2C: fgetws (iofgetws.c:53)
==16211== by 0x108BC3: count_lines (people_generator.c:10)
==16211== by 0x108B3C: main (main.c:15)