排序算法中的分段错误

时间:2015-02-04 04:28:35

标签: c++

所以当我在Xcode中运行以下代码时,它可以工作,但是当我在终端中运行它时会出现分段错误,我不知道为什么。

void Word::arrangeWords(char **&words, int*& pages, int size)
{

char *lowest;
int track;
{
    for (int i=0;i<size;i++)
    {
        lowest=new char[30];
        strcpy(lowest, words[i]);;
        for(int j=i+1;j<size;j++)
        {
            int compResult=strcmp(lowest, words[j]);
            if (compResult>0)
            {
                strcpy(lowest, words[j]);
                track=j;
            }
        }
        std::swap(words[track],words[i]);
        std::swap(pages[track],pages[i]);
        delete [] lowest;
    }
}

}

提前致谢

1 个答案:

答案 0 :(得分:0)

我无法弄清楚导致分段错误的原因,但代码中存在错误。在调用track后,您没有重置std::swap的值。我建议对该功能进行以下更改。

void Word::arrangeWords(char **&words, int*& pages, int size)
{
   for (int i=0;i<size;i++)
   {
      int track = i;
      char lowest[30]; // If you know the size of the array to be 30,
                       // just create an array. Why use new char[30]?
      strcpy(lowest, words[i]);;
      for(int j=i+1;j<size;j++)
      {
         int compResult=strcmp(lowest, words[j]);
         if (compResult>0)
         {
            strcpy(lowest, words[j]);
            track=j;
         }
      }
      if ( track > i )
      {
         std::swap(words[track],words[i]);
         std::swap(pages[track],pages[i]);
      }
   }
}