我正在try 合并 struct 数组的排序,我有许多不同的seg错误,但目前它发生在arrayCopy
函数中:
void arrayCopy(item10array dest[], item10array src[], const int lenght, const int leftShift) {
for (int i = 0; i < lenght; i++) {
structCopy(dest[i], src[leftShift + i]);
}
}
我已经改变了一些小事情,直到我把seg错误推入函数arrayCopy
,我不明白是什么导致了这个错误.
typedef struct
{
char Nome[50]; //vem do ficheiro ruas.txt
unsigned int int_arr[6];
char char_arr[6];
} Arteria;
typedef struct
{
Arteria arteria;
int cont;
} item10array;
void structCopy(item10array dest, item10array src) {
strcpy(dest.arteria.Nome, src.arteria.Nome);
for (int j = 0; j < 6; j++) {
dest.arteria.int_arr[j] = src.arteria.int_arr[j];
dest.arteria.char_arr[j] = src.arteria.char_arr[j];
}
dest.cont = src.cont;
}
void arrayCopy(item10array dest[], item10array src[], const int lenght, const int leftShift) {
for (int i = 0; i < lenght; i++) {
structCopy(dest[i], src[leftShift + i]);
}
}
void mergeSorted(item10array *array, const int l, const int m, const int r) {
int left_lenght = m - l + 1;
int right_lenght = r - m;
item10array temp_left[left_lenght];
item10array temp_right[right_lenght];
int i, j, k;
arrayCopy(temp_left, array, left_lenght, l);
arrayCopy(temp_right, array, right_lenght, m + 1);
for (i = 0, j = 0, k = l; k <= r; k++) {
if ((i < left_lenght) && (j >= right_lenght || temp_left[i].cont <= temp_right[j].cont)) {
structCopy(array[k], temp_left[i]);
i++;
} else {
structCopy(array[k], temp_right[j]);
j++;
}
}
}
void sortRecursion(item10array *arrray, int l, int r) {
//isto é desnecessario mas dá me paz de alma
if (r <= 1)
return;
if (l < r) {
//encontrar o meio do array
int m = l + (r - l) / 2;
sortRecursion(arrray, l, m);
sortRecursion(arrray, m + 1, r);
mergeSorted(arrray, l, m, r);
}
}
void sortItem10(item10array *rua, int lenght) {
sortRecursion(rua, 0, lenght - 1);
}
void item10letra(Arteria *origin_ptr) {
item10array rua[345] = {{"0", 0, 0, 0}};
for (int i = 0; i < 345; i++) {
rua[i].arteria = origin_ptr[i];
}
char letra;
int cont = 0;
int lenght = sizeof(item10array) * 345;
for (int i = 0; i < 345; i++) {
rua[i].arteria = origin_ptr[i];
}
for (int i = 0; i < 345; i++) {
for (int j = 0; j < 6 && rua[i].arteria.char_arr[j] != 0; j++) {
if (rua[i].arteria.char_arr[j] == letra) {
cont++;
}
}
rua[i].cont = cont;
}
sortItem10(rua, lenght);
}
有些东西不是用英文命名的,因为我也不是用英文命名的.
谢谢.