-3
我一直在嘗試實現合併兩個動態序列的概念,這兩個動態序列在作爲輸入提供時已經排序。爲什麼每次都會產生「分段錯誤」?程序首先獲取兩個序列的大小併爲它們動態分配內存。將這些元素作爲輸入後,將調用名爲merge()的函數來實現該概念。它需要兩個指向該序列的指針,並返回具有合併序列的輸入序列的兩倍大小的另一個序列。這裏應該注意輸入序列已經排序。這個程序爲什麼給出'分段錯誤'?
#include <stdio.h>
#include <stdlib.h>
int* merge(int*, int*, int);
int main() {
int *arr1, *arr2, *res;
int size, i;
printf("Enter the size of the array to be entered: ");
scanf("%d", &size);
arr1 = (int*)malloc(size * sizeof(int));
arr2 = (int*)malloc(size * sizeof(int));
if (arr1 == NULL || arr2 == NULL)
exit(1);
printf("Enter the elements for array 1 : \n");
for (i = 0; i < size; i++)
scanf("%d", arr1 + i);
printf("Enter the elements for array 2 : \n");
for (i = 0; i < size; i++)
scanf("%d", arr2 + i);
res = merge(arr1, arr2, size);
if (res != NULL){
for (i = 0; i < 2 * size; i++)
printf("%d ", *(res + i));
}
else
printf("The merging is not possible!");
free(arr1);
free(arr2);
return 0;
}
int* merge(int* obj1, int* obj2, int size) {
int* temp = (int *)malloc(2 * size * sizeof(int));
int i, j, count;
i = j = count = 0;
if (temp == NULL)
return NULL;
while (count < 2 * size){
while (*(obj1 + i) <= *(obj2 + j)){
*(temp + count) = *(obj1 + i);
count++;
i++;
}
while (*(obj2 + j) <= *(obj1 + i)){
*(temp + count) = *(obj2 + j);
count++;
j++;
}
}
return temp;
}
[請參閱爲什麼不投的malloc的返回值(c)中討論和家人..](https://stackoverflow.com/q/605845/2173917) –
你有使用調試器找到導致seg故障的原因? – Haris
我們可以在SO上的Linux操作系統上使用核心文件來記錄調試分段錯誤的過程嗎? 人們經常會遇到這樣的問題。 – Gaurav