2013-02-16 5 views
2

Все работает до тех пор, пока компилятор не попытается выполнить операцию push_back. в возвращаемом состоянии.
Я объявившие пункты как:Вектор push_back вызывает необработанное исключение

vector<int> items; // inside the header file. 

// в файле .cpp

void MsPs::findnSort() 
{ 
    for(int i = 1; i<50 ; i++) 
    { 

     string temp = static_cast<ostringstream*>(&(ostringstream() << i))->str(); // TO convert int i to a string temp 
     if(findSupport(temp) >= MIS[i]) 
     { 
      items.push_back(i); 
     } 

    } 

} 

следующее сообщение об ошибке выскакивает:

Unhandled exception at 0x5052ad4a (msvcp100d.dll) in PrefixScan.exe: 0xC0000005: Access violation reading location 0x3d4cccd1. 

PS: У меня есть еще одна функция, используя операция push_back, и там она работает нормально.

Может ли кто-нибудь помочь мне с этим?

Даже это дает ту же ошибку:

void MsPs::findnSort() 
{ 
    for(int i = 1; i<50 ; i++) 
    { 

     items.push_back(i); 
    } 


} 
+0

Какой размер 'MIS'? – billz

+0

Его размер равен 50, но при отладке код не проходит даже первого прохода. – AdRoiT

+0

Память повреждена в другом месте, используйте отладчик, чтобы увидеть стек вызовов, должно найти что-то неправильное – billz

ответ

2

Я думаю, что проблема в том, что ostringstream разрушается, когда статические возвращается литые. Таким образом, ваш указатель свисает, когда вызывается str(). Попробуйте это вместо:

void MsPs::findnSort() 
{ 
    for(int i = 1; i<50 ; i++) 
    { 
     ostringstream blah; 
     string temp = (blah << i).str(); 

     if(findSupport(temp) >= MIS[i]) 
     { 
      items.push_back(i); 
     } 

    } 

} 
+0

Eventhis дает ту же ошибку: недействительными MSPs :: findnSort() { \t для (INT I = 1; г <50; я ++) { \t \t \t \t \t \t \t \t пунктов.push_back (я); \t \t} } – AdRoiT

+0

@AdRoiT: Звуки для меня, как вы вызываете 'findnSort' на нуль или иначе недействительного указатель на объект' MsPs'. – ildjarn