【发布时间】:2021-12-26 00:28:45
【问题描述】:
我有一个关于从 C 中的函数返回数组的问题,我不知道为什么它总是将结果作为转储代码给出。请帮忙,我真的非常感谢你! 我设置了一个 int list3[size3] 但似乎我必须返回一个数组格式为 int*list3。所以我将另一个数组设置为 list4[size3] 以将 list3 复制到 list4 中。但我不确定这是导致代码转储的原因。如果是,请帮助我提供解决问题的建议。再次感谢您!
#include<stdio.h>
int* merged(int[], int[], int, int);
void sort(int[], int);
int main() {
int size1;
printf("Enter list1: ");
scanf("%d", &size1);
int list1[size1];
for (int i = 0; i < size1; i++) {
scanf("%d", &list1[i]);
}
int size2;
printf("Enter list2: ");
scanf("%d", &size2);
int list2[size2];
for (int i = 0; i < size2; i++) {
scanf("%d", &list2[i]);
}
int* list3 = merged(list1, list2, size1, size2);
printf("The merged list is: ");
int size3 = size1 + size2;
for (int i = 0; i < size3; i++) {
printf("%d ", list3[i]);
}
printf("\n");
}
int* merged(int list1[], int list2[], int size1, int size2) {
int list3[size1 + size2];
for (int i = 0; i < size1; i++) {
list3[i] = list1[i];
}
int count = size1;
for (int i = 0; i < size2; i++) {
list3[count] = list2[i];
count++;
}
int size3 = size1 + size2;
sort(list3, size3);
int* list4;
for (int i = 0; i < size3; i++) {
list4[i] = list3[i];
}
return list3;
}
void sort(int list3[], int size3) {
for (int i = 0; i < size3; i++) {
int min = list3[i];
int min_index = i;
for (int j = i + 1; j < size3; j++) {
if (list3[j] < min) {
min = list3[j];
min_index = j;
}
}
if (min_index != i) {
list3[min_index] = list3[i];
list3[i] = min;
}
}
}
【问题讨论】:
-
您是否尝试过使用 gdb 之类的工具对其进行检查,并找到导致您出现 seg 错误的行和元素?此外,更好地缩进你的代码将有助于它的可读性
-
您不能返回指向自动变量的指针(例如
list3)。您不能使用尚未初始化的指针变量指向某个对象 (list4)。如果你想让一个函数返回一个数组,你基本上有两个选择:使用malloc动态分配数组或在调用者中创建数组并将其作为附加参数提供。