尝试使用合并排序读取文件时终端中的段故障

时间:2014-02-06 19:52:41

标签: c linux

我正在尝试读取名为data的文本文件,然后使用mergesort对其进行排序。我通过键入 mergeSort<来运行终端命令。数据, 但得到分段错误。数据文本文件只是一个随机数列表。

mergesort的代码如下:

#include "mySort.h"
#include <stdio.h>
#include <stdlib.h>
#define MAX 50

void mySort(int array[], unsigned int first, unsigned int last)
{
int mid;
int i;
int j;
int k;
mid = 0; 
i = 0; 
j = 0; 
k = 0; 
int Larr[MAX], Rarr[MAX];

if (first < last) 
{
    mid = (first - last - 1)/2;
    mySort(array, first, mid);
    mySort(array, mid+1, last);



    for(i = 0; i < (mid - (first+1)); i++)
        Larr[i] = array[i + first -1];
    for(j = 0; j < (last - mid); j++)
        Rarr[j] = array[mid + j];

    Larr[mid - first + 1] = 9999999;
    Rarr[last - mid + 1] = 9999999;

    i = 0;
    j = 0;

    for(k = first; k <= last; k++)
        {
        if (myCompare(Larr[i], Rarr[j]) < 0) 
            {
            myCopy(&Larr[i],&array[k]);
            i++;
            }
        else
            {
            myCopy(&Rarr[j],&array[k]);
            j++;
            }
        }
}

}           

1 个答案:

答案 0 :(得分:1)

  1. gcc -g编译以确保您已启用调试。
  2. 设置ulimit。 ulimit -c unlimited。这可确保在发生段错误时创建核心。
  3. 运行您的程序。
  4. 运行gdb ./mergeSort core.XXX。当gdb启动时,使用'bt'命令获取回溯并查看出错的地方。从源文件所在的同一目录运行gdb。
  5. 在调试时查看这些链接。

    http://heather.cs.ucdavis.edu/~matloff/UnixAndC/CLanguage/Debug.html

    http://beej.us/guide/bggdb/