Сортировать указатель на указатель

Я пытаюсь отсортировать массив строк, который реализован с помощью указателя на указатель. Код, который я использую:

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 снова. Может кто-нибудь объяснить, почему я получаю ошибку сегмента и как это исправить?

-1

Решение

(strcmp(names[k],names[k-1]) < 0) && (k > 0) неправильно. Правильная форма
(k > 0) && (strcmp(names[k],names[k-1]) < 0)

Последовательность имеет значение, потому что names[k-1] небезопасно читать, когда k это ноль. && всегда сначала вычисляет свой левый операнд и вычисляет только свой правый операнд, когда true

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]