C++ 使用q排序的分割错误?
我试图使用qsort对字符的指针数组进行排序,并在编译时不断出现分段错误。我将发布我的qsort调用和比较函数的代码,任何帮助都将不胜感激C++ 使用q排序的分割错误?,c++,qsort,C++,Qsort,我试图使用qsort对字符的指针数组进行排序,并在编译时不断出现分段错误。我将发布我的qsort调用和比较函数的代码,任何帮助都将不胜感激 //count declaration size_t count = (sizeof (strPtrsQsort)/sizeof (*strPtrsQsort)); //function call qsort ((char *)ptr, size, sizeof(char), compare); //compare function int compare
//count declaration
size_t count = (sizeof (strPtrsQsort)/sizeof (*strPtrsQsort));
//function call
qsort ((char *)ptr, size, sizeof(char), compare);
//compare function
int compare (const void *a, const void *b)
{
const char **ia = (const char **)a;
const char **ib = (const char **)b;
return strcmp (*ia, *ib);
}
根据
qsort
调用判断,您正在对char
元素数组进行排序:基本指针类型作为char*
值传递给qsort
,元素大小为sizeof(char)
。但是,您的比较函数是为指向char
的指针数组编写的。这是完全不正确和不一致的。这就是造成这次事故的原因
在随附的文本中,您声明您正在“尝试对字符的指针数组进行排序”。为什么在这种情况下,您指定元素大小为<代码> siZeOf(char)< /C> >而不是,例如,<>代码> siZoof(char) 请注意,即使当您需要使用C样式原始数组时,仍然可以使用C++ STL算法,因为指针实际上是随机访问迭代器。例如,这项工作:
#include <algorithm>
#include <iostream>
#include <cstring>
static
bool compare(const char *a, const char *b)
{
return std::strcmp(a, b) < 0;
}
int main()
{
const char *stringarray[] = {
"zyxulsusd",
"abcdef",
"asdf"
};
std::sort(stringarray, stringarray + 3, compare);
// -----------^
// Just like a normal iterator the end iterator points
// to an imaginary element behind the data.
for(int i = 0; i < 3; i++) {
std::cout << stringarray[i] << std::endl;
}
return 0;
}
#包括
#包括
#包括
静止的
布尔比较(常量字符*a,常量字符*b)
{
返回std::strcmp(a,b)<0;
}
int main()
{
常量字符*字符串数组[]={
“Zyxulsud”,
“abcdef”,
“asdf”
};
排序(stringarray,stringarray+3,比较);
// -----------^
//就像普通迭代器一样,结束迭代器指向
//到数据后面的一个虚拟元素。
对于(int i=0;i<3;i++){
STD:什么是代码>计数>代码>什么是代码> StrutRQueStase<代码>它们存在于代码中的任何代码段中?它们在代码> qSque<代码>中没有使用。为什么在C++中使用C字符串、原始数组和C的<代码> QStase<代码> >使用<代码>:STD::向量< /代码>和<代码> STD::排序< /代码>。如果你试图对点数组排序呃,为什么数组元素大小作为sizeof(char)传递给qsort
???ptr
是如何声明的?为什么在传递到qsort
之前要将其转换为char*
?感谢您的帮助。我对指针非常陌生,我刚刚开始解引用。这帮了大忙。我不确定stringarray[3]
是有效的,即使您只需要它的地址。已更改为其他语法