Следующий код предназначен для печати наибольшего числа из списка целых чисел. Я получаю:Ошибка: malloc(): повреждение памяти в функции сравнения для сортировки
*** Error in `./a.out': malloc(): memory corruption: 0x0000000000bfe070 ***
в списке (20 нулей):
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
Однако в выше, если я ставлю некоторые не нулевые элементы, которые я не получаю сообщение об ошибке.
Это мой код для функции сравнения:
bool comp(int a,int b)
{
if(a == b)
return true;
stringstream ss;
ss << a;
string a1 = ss.str();
stringstream sss;
sss << b;
string b1 = sss.str();
int i = 0;
int l1 = a1.length();
int l2 = b1.length();
while(i < l1 && i < l2)
{
if(a1[i] > b1[i])
return true;
if(a1[i] < b1[i])
return false;
i++;
}
if(l1 == l2)
return true;
if(l1 < l2)
if(b1[l1] > a1[0])
return false;
else
return true;
else
if(a1[l2] > b1[0])
return true;
else
return false;
}
Я использую СТЛ
sort(nums.begin(),nums.end(),comp);
где НУМС вектор целых чисел.
EDIT 1:
Это весь код:
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<sstream>
using namespace std;
bool comp(int a,int b)
{
if(a == b)
return true;
stringstream ss;
ss << a;
string a1 = ss.str();
stringstream sss;
sss << b;
string b1 = sss.str();
int i = 0;
int l1 = a1.length();
int l2 = b1.length();
while(i < l1 && i < l2)
{
if(a1[i] > b1[i])
return true;
if(a1[i] < b1[i])
return false;
i++;
}
if(l1 == l2)
return true;
if(l1 < l2)
if(b1[l1] > a1[0])
return false;
else
return true;
else
if(a1[l2] > b1[0])
return true;
else
return false;
}
void largestNumber(vector<int>& nums)
{
sort(nums.begin(),nums.end(),comp);
/*string s = "";
vector<int>::iterator it = nums.begin();
while(it != nums.end())
{
stringstream ss;
ss << *it;
s = s+ss.str();
it++;
}
return s;*/
}
int main()
{
int n;
cin>>n;
vector<int> arr(n);
for(int i = 0;i<n;i++)
cin>>arr[i];
largestNumber(arr);/*
string s = largestNumber(arr);
cout<<s<<endl;*/
}
Почему вы преобразовываете целые числа в строки и сравниваете строки, а не просто сравниваете целые числа напрямую? –
Попробуйте запустить программу с valgrind. Это очень полезно при поиске ошибок, когда программа непреднамеренно пишет/читает из областей, которые она не должна. Полученная ошибка означает, что программа записала часть кучи, которая не была выделена пользователю. – Imran