Рассмотрим следующий код.
Предполагается отсортировать вектор векторов целых в лексикографическом порядке,
то есть сначала по первому столбцу, а затем по второму и так далее.
В моем приложении я забочусь только о первых 6 из 8 столбцов
так было возвращено значение true в случае, когда значения равны для первых 6 столбцов.
И это вызвало проблемы (ошибка сегментации). Он работал на 1000 данных, и он потерпел крах на 1001.
Пример кода - игрушка, но сортировка является частью довольно сложной программы.
После долгой отладки я узнал, что это стало причиной неприятностей.
Программа пытается отсортировать массив всех нулей с помощью одной (1, 0, ..., 0) записи.
Пожалуйста, любой специалист по C ++, подскажите, что не так с оригинальной (указанной) программой?
Я компилировал его на 32-битной и 64-битной Linux и Visual Studio на 32-битной Windows.
Это всегда было сбой. После изменения в комментарии все кажется нормально.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int COLS = 8;
bool compare (const vector<int>& r1, const vector<int>& r2)
{
for (int i = 0; i < COLS-2; i++)
if ( r1[ i ] != r2[ i ] )
return (r1[ i ] < r2[ i ]);
return true; //if true is replace by r1[ COLS-1 ] < r2[ COLS-1 ] then is OK
};
int main(int argc, char **argv)
{
int Na = 20;
vector< vector<int> > v( Na );
for (int r = 0; r < v.size(); r++)
v[r].resize(COLS, 0);
v[0][0] = 1;
cout << "Sorting\n";
sort( v.begin(), v.end(), compare );
cout << "Eof Sorting\n";
return 0;
}