C++ 排序算法中的分段错误

C++ 排序算法中的分段错误,c++,C++,所以,当我在Xcode中运行下面的代码时,它可以工作,但当我在terminal中运行它时会出现分段错误,我不知道为什么 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,

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

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;
    }
}

}

提前感谢

我无法找出导致分段错误的原因,但您的代码中有一个bug。在调用std::swap之后,您没有重置track的值。我建议对函数进行以下更改

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]);
      }
   }
}

你有没有先检查一下明显的?验证所有字的长度是否小于29个字符(不包括空终止符),以及字和页数组是否至少与大小相同。字中的任何字都不会超过30个字符。阵列也和大小一样大,所以这不应该是一个问题problem@Anonymous单词必须少于30个字符。无论如何,加一张支票也没什么坏处。通过引用传递单词是危险的,让函数使用char**words和int*页面。我不知道怎么做,但这个解决方案修复了分段错误。感谢在原始代码中,始终使用track,但并不总是设置为任何值,因此单词[track]可能不合适。