所以当我在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;
}
}
}
提前致谢
答案 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]);
}
}
}