2013-02-13 2 views
0
  int sortAtt2,compare=0,counter=0; 
      string tempTitle; 
      for(int t=0; t<MAX_BOOKS; t++) 
      { 
       for(int i=0; i<MAX_BOOKS; i++) 
       { 
        compare=(books[i+1].bookTitle).compare(books[i].bookTitle); 
        if(compare>0) 
        { 
         tempTitle=books[i].bookTitle; 
         books[i].bookTitle=books[i+1].bookTitle; 
         books[i+1].bookTitle=tempTitle; 

        } 
       } 
      } 

это мой код, всякий раз, когда я выполняю эту функцию, программа вылетает. Любая идея почему? Я сравниваю две строки здесь, чтобы пузырь сортировать их.программа сбой при сортировке пузырьков?

+0

Где именно он падает? Вы должны запустить программу в отладчике, который сообщит вам об аварийном местоположении. Обычно это помогает найти проблему. – sth

+0

@sth Я только что обнаружил, что он сбой в аргументе сравнения строк. – 2013-02-13 03:36:38

+0

Я не собираюсь взорвать ваш пузырь, но ... –

ответ

3

Доступ за пределы доступа. Вы получаете доступ к books[i+1] в цикле, где i подсчитывается до MAX_BOOKS - 1, i, e, вы получаете доступ к books[MAX_BOOKS] - один за концом массива с элементами MAX_BOOKS.

+0

, но тот же самый точный аргумент работает для целых чисел, просто он не работает со строками :( – 2013-02-13 03:33:58

+0

@JoshuaJones Это все еще неправильно, хотя независимо от того, используете ли вы строки или ints или что-то еще. Вам просто повезло/не повезло, что он работал с 'int'. Доступ за пределы - это неопределенное поведение *, что означает, что он может работать, а не работать, или украсть ваш грузовик и запустить ваш почтовый ящик. – us2012

+0

@ JoshuaJones - В первую очередь потому, что вы не будете называть методы типа 'float' и' int'. Возвращаемое значение было бы тем, что находится в памяти после вашего массива. – Aesthete

1

Если у вас есть MAX_BOOKS из 8.

Book books[MAX_BOOKS]; 

И вам цикл, как это.

for(int i=0; i<MAX_BOOKS; i++) 
{ 
    books[i+1]; 
} 

Что происходит, когда i == 7?

+0

, но тот же точный аргумент работает для целых чисел и плавающих чисел, просто не со строками. – 2013-02-13 03:35:14

+1

Это потому, что 'float' и' int' не имеют метода '.bookTitle'. Доступ к этим типам приведет к возврату всего, что находится в памяти после вашего массива. – Aesthete

+0

thanx, теперь я понимаю. – 2013-02-13 03:39:26

Смежные вопросы