I have used breakpoints to check if my compare function is being called while inserting element into Multi-set but it never reaches the breakpoint.
The error Unhandled exception at 0x003c5a71 in Regular_Calibration_d.exe: 0xC0000005: Access violation reading location 0x00000014.
I pasting the code below. Please let me know where I am doing wrong . Couple of important thing in which I have a doubt .
1) I am manipulating sms.message before actually inserting it in multi-set so do you guys think that I am doing something wrong there which creates the probelem?
2) If I think for a time being that something is wrong with string manipulation but then why it doesnt hit the comapre function which compare time .
Below are my code.
structure of SMS
struct SMS
{
SMS(const SMSType::Enum e, const QString& s);
QDateTime time;
SMSType::Enum smsType;
QString message;
};
//construtcor of message
SMS::SMS( const SMSType::Enum e, const QString& s )
: smsType( e ), message( s )
{
time = QDateTime::currentDateTime();
}
//compare function
bool SMS_list::LessSMSTime::operator ()( const SMS& left,
const SMS& right ) const
{
QDate date_left = left.time.date();
QDate date_right = right.time.date();
if( date_left.year() < date_right.year() )
return true;
else if( date_left.year() > date_right.year() )
return false;
if( date_left.month() < date_right.month() )
return true;
else if( date_left.month() > date_right.month() )
return false;
if( date_left.day() < date_right.day() )
return true;
else if( date_left.day() > date_right.day() )
return false;
QTime time_left = left.time.time();
QTime time_right = right.time.time();
if( time_left.hour() < time_right.hour() )
return true;
else if( time_left .hour() > time_right.hour() )
return false;
if( time_left.minute() < time_right.minute() )
return true;
else if( time_left.minute() > time_right.minute() )
return false;
if( time_left.second() < time_right.second() )
return true;
else if( time_left.second() > time_right.second() )
return false;
if( time_left.msec() < time_right.msec () )
return true;
return false;
}
//declaration of multiset
std::multiset<SMS, LessSMSTime> SMSSet;
// in some function
SMSSet.insert( sms ) ;
// string manipulation
void SMSInterface::output( const SMSType::Enum type, QString str_qt ) const
{
// convert QString to std::String
std::string str = str_qt.toStdString();
QMutex mutex;
mutex.lock();
if( str[ str.length() - 1 ] == '\n' )
{
str = std::string( str.cbegin(), str.cbegin() + str.length() - 1 );
}
//convert std::string to QString
QString str_to_qt = QString::fromStdString ( str );
// QString str_to_qt = QString::fromUtf8 ( str.c_str() );
SMS sms( type, str_to_qt );
sms_list_->add_sms( message ); // inside this function multi-set insertion is called
bla bala
mutex.unlock();
}
As discussed,
suggested you were trying to call a member function, or read a property on something that was null.
When you posted more code, we could see
sms_list_->add_sms( message );
as the only thing in sight which could be
null
and in fact this hadn't been initialised and was null, hence the problem.