gpt4 book ai didi

c - 我遇到了段错误,但我没有找到 oO?

转载 作者:行者123 更新时间:2023-11-30 15:01:12 25 4
gpt4 key购买 nike

它应该通过合并进行排序。有两个功能:合并和排序合并。一些未知的函数(从文件读取数组和打印数组)在输入文件中完全起作用。

Valgrind 告诉我,失败发生在 array2 的分配以及在 void merge 中的第三个 while 循环处读取和写入时。

void merge(int* array, int start, int middle, int end) {

int size = end - start + 1;
int *array2 = malloc(size*sizeof(array2));

int k = start;
int m = middle + 1;
int i = 0;
int j = 0;

while ( k <= middle && m <= end ) {
if ( array[k] <= array[m] ) {
array2[i] = array[k];
k++;
}
else {
array2[i] = array[m];
m++;
}
i++;
}
while ( k <= middle ) {
array2[i] = array[k];
k++;
i++;
}
while ( m <= end ) {
array2[i] = array[k];
k++;
i++;
}
while ( j < i ) {
array[ start + j -1 ] = array2[j];
j++;
}
free(array2);
}

void merge_sort(int* array, int first, int last) {

int middle;

if ( first < last ) {
middle = ((first+last) / 2);
merge_sort (array, first, middle);
merge_sort (array, middle + 1, last);
merge (array, first, middle, last);
}
}

int main (int argc, char *argv[])
{
if (argc!=3) {
printf ("usage: %s <maximale anzahl> <dateipfad>\n", argv[0]);
exit(2);
}

char *filename = argv[2];

int *array;
int size = atoi(argv[1]);
array = malloc(size*sizeof(array));

int len = read_array_from_file(array, atoi(argv[1]), filename);

printf("Eingabe:\n");
print_array(array, len);

merge_sort(array, array[0], len);

printf("Sortiert:\n");
print_array(array, len);

free(array);
return 0;
}

最佳答案

至少这是错误的:

int *array2 = malloc(size*sizeof(array2));

我认为你的意思是:

int *array2 = malloc(size * sizeof(*array2));

您想要分配 size 乘以每个条目的大小,而不是数组指针的大小。

但是(在 64 位机器上)这实际上会使数组的字节数减少一半,从而导致更快地发生溢出。您有一个逻辑错误,需要通过使用调试器单步执行代码来解决。

关于c - 我遇到了段错误,但我没有找到 oO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41591621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com