-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--;
    }
  }
}

names 已经用另一种方法初始化并填充了 7 个名称。我在这条线上遇到了段错误

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

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

4

1 回答 1

2

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

序列很重要,因为当为零 names[k-1]时读取是不安全的。总是先计算它的左操作数,只有当左操作数是k&&true

于 2015-11-28T18:08:58.433 回答