【发布时间】:2021-06-03 19:51:07
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
struct arrayADT {
int *A;
int size;
int length;
int *B;
int arr3;
};
struct arrayADT * MergeArray(struct arrayADT *arr1, struct arrayADT *arr2) { //we create thus in heap cuz we need to be able to use these in main function
struct arrayADT *arr3 = (struct arrayADT *)malloc((sizeof(struct arrayADT)));
int i, j, k;
i = j = k = 0;
while(i < arr1->length && j < arr1->length ) {
if(arr1->A[i] < arr2->A[j]) {
arr3->A[k] = arr1->A[i];
k++;
i++;
}
else {
arr3->A[k] = arr2->A[j];
k++;
j++;
}
}
for(; i<arr1->length ; i++) {
arr3->A[k] = arr1->A[i];
k++;
}
for(; j < arr2->length ; j++) {
arr3->A[k] = arr2->A[j];
k++;
}
arr3->length = arr1->length + arr2->length;
arr3->length = 10;
}
void main() {
struct arrayADT arr;
printf("Enter the size of an array");
scanf("%d", &arr.size);
arr.A = (struct arrayADT *)malloc(arr.size * sizeof(int));
arr.length = 0;
int n;
printf("enter the number of elements in an array");
scanf("%d", &n);
printf("enter the elements");
for(int i = 0; i < n; i++) {
scanf("%d", &arr.A[i]);
}
arr.length = n;
display(arr);
printf("Enter second array");
int j;
struct arrayADT *B = (struct arrayADT *)malloc((sizeof(struct arrayADT)));
for(j = 0; j < arr.length; j++) {
scanf("%d", &B[j]);
}
struct arrayADT *arr3 = (struct arrayADT *)malloc(sizeof(struct arrayADT));
arr3 = MergeArray(&arr, &B);
display(*arr3);
我希望使用堆内存合并这些数组,但我遇到了分段错误。我是使用指针进行 C 编程的新手,我在这里被打动了,如果我在你的帮助下通过了这个障碍,那将非常有帮助。 而且我没有找到我的错误所在,如果有人也指定这一点会很有帮助,这样我以后就可以避免这些错误。 PS:我正在使用 minGW 编译器。
【问题讨论】:
-
您为
arr3分配内存,但没有为其中的A和B指针分配内存。您也不会从您的函数返回一个值,该值表示它将返回struct arrayADT * -
我返回了值,但问题仍然没有解决。但是我不明白你所说的我没有分配内存 arr3 但没有分配其中的 A 和 B 指针。
-
我不明白你的结构的结构。 (显然你也不是。)当然,该结构代表一个具有长度和最大容量的数组,但
B和arr3字段是干什么用的?顺便说一句,您的数据成员的名称与三个数组结构的名称相同,并且您在代码中混淆了它们的使用。 -
如果你打开警告,你会发现你搞错了几件事:
arr.A不是(struct arrayADT *),它是(int *)。另一方面,您不能scanf("%d", &B[j]);,因为B[j]是(struct arrayADT *),而不是(int *)。这也是你的 seggie 出现的地方,因为B[1]将是结构数组中的第二个结构,但你只有一个结构,B。 -
@MOehm 感谢您的回复。我是指针的初学者,所以我尝试了一种偏离我的导师的方法,我得到了这个错误。你能纠正我犯的错误并帮助我吗
标签: c pointers struct segmentation-fault