将指针排序到指针

时间:2015-11-28 18:04:04

标签: c++ sorting pointers pointer-to-pointer

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

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个名称。我在这一行得到了一个段错误

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

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

1 个答案:

答案 0 :(得分:2)

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

序列很重要,因为当names[k-1]为零时k不安全。 &&始终首先计算其左操作数,并且只在左边是true时才计算其右操作数