2015-11-28 84 views
-1

我想对使用指针指针实现的字符串数组进行排序。我使用的代码是:对指针进行排序指针

void sort(){ 
    char** names; 
    for(int i = 1; i < size; i++){ 
    int k = i; 
    while((strcmp(names[k],names[k-1]) < 0) && (k > 0)){ 
     char* temp; 
     temp = names[k]; 
     names[k] = names[k-1]; 
     names[k-1] = temp; 
     k--; 
    } 
    } 
} 

的名字已经被初始化,并弥漫着另一种方法7名。我在这条线上遇到seg故障

names[k] = names[k-1]; 
names[k-1] = temp; 

但我不确定为什么。在while循环的第一次迭代之后,我得到了seg错误,并且k递减为0.它永远不会返回for循环来再次递增i和k。有人可以解释为什么我得到seg故障以及如何解决它?

+0

'names'不能在另一种方法初始化,因为它是在你所展示的是一个本地定义? –

+0

我只是这样做,以显示名称是char **。它实际上并没有在那里声明 – tcas271

+0

@ tcas271我们不知道你的char **是如何初始化或设置的。这本身可能是导致事故的原因之一。 – PaulMcKenzie

回答

2

(strcmp(names[k],names[k-1]) < 0) && (k > 0)是错误的。正确的方式是 (k > 0) && (strcmp(names[k],names[k-1]) < 0)

的顺序很重要,因为names[k-1]是不安全的读取时k为零。 &&总是首先计算其左操作数,仅计算其右操作数时,左边的是true

+0

对,很好的接收! –

+0

哇,我没有意识到订单无关紧要,谢谢! – tcas271