Я пытаюсь отсортировать массив строк, который реализован с помощью указателя на указатель. Код, который я использую:
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;
но я не уверен, почему именно. Я получаю ошибку seg после первой итерации цикла while, и k уменьшается до 0. Он никогда не возвращается в цикл for для увеличения i и k снова. Может кто-нибудь объяснить, почему я получаю ошибку сегмента и как это исправить?
(strcmp(names[k],names[k-1]) < 0) && (k > 0)
неправильно. Правильная форма
(k > 0) && (strcmp(names[k],names[k-1]) < 0)
Последовательность имеет значение, потому что names[k-1]
небезопасно читать, когда k
это ноль. &&
всегда сначала вычисляет свой левый операнд и вычисляет только свой правый операнд, когда true
Других решений пока нет …