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