Сортировка выбором со строками в массиве структур

У меня проблемы с выбором строк внутри структур. Все значения, которые я ввожу, не меняют положение после сортировки. Я думаю, что мне не хватает чего-то незначительного, но я не смог найти соответствующую помощь в Интернете. *p_customer_start указывает на начало массива. p_outer и p_inner должны выполнять сортировку. Кто-нибудь знает, что происходит не так?

void sort_customers(int quantity, struct customer *p_customer_start)
{
struct customer *p_customer,
*p_outer,
*p_inner,
temp_customer;

printf("\nInside the sorting function.");

for(p_customer = p_customer_start; (p_customer-p_customer_start) < quantity; p_customer++)
{
    p_inner = p_customer;

    for(p_outer = p_customer + 1; p_outer <= quantity; p_outer++)
        if(strcmp(p_outer->customer_name, p_inner->customer_name) > 0)
            p_inner = p_outer;

    temp_customer = *p_customer;
    *p_customer = *p_inner;
    *p_inner = temp_customer;

    p_inner++;
}

 return;
}

person Jesse Upchurch    schedule 25.10.2013    source источник


Ответы (1)


Наверное, это сравнение

p_outer <= quantity

вы можете попробовать это вместо этого

p_outer <= (p_customer_start + (quantity-1))

p_outer будет указывать на какое-то место в системной памяти, и адрес места в памяти, вероятно, больше, чем количество элементов в сортируемом массиве.

person Jay Elston    schedule 25.10.2013
comment
Я пытался вставить то, что вы сказали, и теперь я выхожу за пределы памяти. - person Jesse Upchurch; 25.10.2013
comment
@Jesse - попробуйте этот тест: p_outer ‹= (p_customer_start + (количество-1)) - person Jay Elston; 25.10.2013
comment
На самом деле я еще немного повозился и пришел к следующему: (p_outer-p_inner) ‹= количество. Кажется, он работает нормально. Но спасибо за интерес к моему вопросу! - person Jesse Upchurch; 25.10.2013