Я искал повсюду, чтобы попытаться выяснить, как исправить SIGSEGV, и только увидел, что это из-за висячих указателей или из-за недостаточного выделения памяти. Я думаю, что это продолжает давать ошибку из-за чего-то связанного с функцией malloc, которую я до сих пор точно не понимаю.
В настоящее время я пытался заполнить функцию malloc большими или большими числами и тем же массивом структур и постоянно получать ошибку SIGSEGV при компиляции, поэтому при желании обработайте 999999 как заполнитель.
Мое понимание кода состоит в том, что в основной функции после открытия бинарного файла есть то, что он будет читать отдельно, каждый член структуры в массиве структуры, который был создан, называется "arr". Этот массив структур будет затем отсортирован с помощью функции qsort. указатель f затем перематывается на первый блок памяти и затем записывает отсортированный массив структур в двоичный файл, и, наконец, память освобождается. Я близок к тому, чего я хотел бы достичь с этим?
while(!feof(f)){
struct variables *arr[999999]; //create array of structs??
*arr = malloc(999999); //allocate required memory to the array of structs??
fread(&arr, sizeof(c.monkey), 1, f);
fread(&arr, sizeof(c.apple), 1, f);
fread(&arr, sizeof(c.shield), 1, f);
fread(&arr, sizeof(c.car), 1, f);
fread(&arr, sizeof(c.house), 1, f);
fread(&arr, sizeof(c.pool), 1, f);
fread(&arr, sizeof(c.person), 1, f);
fread(&arr, sizeof(c.spade), 1, f);
fread(&arr, sizeof(c.traffic), 1, f);
fread(&arr, sizeof(c.egg), 1, f);
fread(&arr, sizeof(c.envelope), 1, f);
fread(&arr, sizeof(c.hair), 1, f);
fread(&arr, sizeof(c.speaker), 1, f);
fread(&arr, sizeof(c.sword), 1, f);
fread(&arr, sizeof(c.tower), 1, f);
fread(&arr, sizeof(c.phone), 1, f);
qsort(&arr, 16, sizeof(c), compare);
rewind(f);
fwrite(arr, sizeof(c.monkey), 1, f);
fwrite(arr, sizeof(c.apple), 1, f);
fwrite(arr, sizeof(c.shield), 1, f);
fwrite(arr, sizeof(c.car), 1, f);
fwrite(arr, sizeof(c.house), 1, f);
fwrite(arr, sizeof(c.pool), 1, f);
fwrite(arr, sizeof(c.person), 1, f);
fwrite(arr, sizeof(c.spade), 1, f);
fwrite(arr, sizeof(c.traffic), 1, f);
fwrite(arr, sizeof(c.egg), 1, f);
fwrite(arr, sizeof(c.envelope), 1, f);
fwrite(arr, sizeof(c.hair), 1, f);
fwrite(arr, sizeof(c.speaker), 1, f);
fwrite(arr, sizeof(c.sword), 1, f);
fwrite(arr, sizeof(c.tower), 1, f);
fwrite(arr, sizeof(c.phone), 1, f);
free(*arr);