![](/img/trans.png)
[英]I am getting a Segmentation fault (core dumped) error with dynamically allocated arrays for merge sort in C?
[英]I have written this Merge Sort program in C. It shows "Segmentation fault (core dumped)" after implementation of arrays
#include <stdio.h>
void mergesort();
void merge();
int main()
{
int a[40], n;
printf("\nEnter the number of elements:");
scanf("%d", &n);
printf("\nEnter the %d elements:", n);
for (int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
mergesort(a, 0, n - 1);
printf("\nThe Sorted array is: ");
for (int i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
return 0;
}
void mergesort(int a[], int first, int last)
{
int mid;
if (first < last)
{
mid = (mid + last) / 2;
mergesort(a, first, mid);
mergesort(a, mid + 1, last);
merge(a, first, mid, last);
}
}
void merge(int a[], int first, int mid, int last)
{
int b[50];
int i, j, k;
i = first;
j = mid + 1;
k = first;
while (i <= mid && j <= last)
{
if (a[i] <= a[j])
b[k++] = a[i++];
else
b[k++] = a[j++];
}
if (i > mid)
{
while (j <= last)
b[k++] = a[j++];
}
else
{
while (i <= mid)
b[k++] = a[i++];
}
for (i = first; i <= last; i++)
a[i] = b[i];
}
我在 C 中編寫了這個合並排序程序。 執行 arrays 后顯示“分段錯誤(核心轉儲)”。 我不知道是什么問題。 所以請幫幫我,我第二天要考試。 我像這樣得到 output
輸入元素數:5
輸入 5 個元素:1 2 3 5 4 分段錯誤(核心轉儲)
發現我在實現中間變量時出錯了。 正確的是:
mid=(first+last)/2;
謝謝大家的幫助。 您的每一條回復都有助於識別錯誤。
該程序具有未定義的行為,因為您在未初始化時閱讀了mid
:
void mergesort(int a[], int first, int last) {
int mid;
if (first < last) {
mid = (mid + last) / 2;
// ^^^
你可能想要:
mid = (first + last) / 2;
void mergesort(int a[],int first,int last)
{
int mid;
if(first<last)
{
mid=(mid+last)/2;
mergesort(a,first,mid);
mergesort(a,mid+1,last);
merge(a,first,mid,last);
}
}
第一次運行時,不保證mid
為 0 或任何其他數字; mid 是一些 integer,每次都可能改變。 因此,您獲得的數字可能遠遠超出數組的范圍。 將 mid 初始化為 0 可以解決這個問題,但正如我上面的答案指出的那樣,你實際上想要做mid = (first + last) / 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.