我是一名系統工程學生,我正在從我的大學完成一項任務。事情是我在我的程序中遇到了上面提到的錯誤。該程序必須獲取一個文本文件並從中提取所有文本行,文本文件名作爲控制檯上的參數傳遞,一旦提取了文本行,我將它們存儲在一個在conversacion類中聲明的靜態向量上,然後角色對象必須從矢量中獲得一條直線,並且如果它接收到的直線符合特定條件,那麼角色對象將返回接收到的具有角色的情緒,名稱或年齡的直線。爲什麼我會得到「./exe:free():Invalid Pointer」錯誤?
貌似錯誤是在人物類,刪除最後一個,而在main方法讓我的程序運行非常好。
的代碼如下:
int main(int argc, char * argv[]){
int iterador=0;
Conversacion * conversacion=new Conversacion();
Persona * persona1 = new Persona("David",21,"feliz");
Persona * persona2 = new Persona("John",24,"aburrido");
char linea[40];
string nomarchivo;
nomarchivo=argv[1];
ifstream archivo(nomarchivo.c_str());
while(!archivo.eof()){
archivo.getline(linea, 40);
string clinea(linea);
conversacion->getConversacion(clinea);
}
archivo.close();
/**This for is just meant to print the contents of the vector just to check if
is it ok, and yes it is.**/
for(int i=0; i<(conversacion->getVectorSize()-1); i++){
cout <<i+1 <<") "<<conversacion->getLinea(i)<< endl;
}
/**Deleting this while makes my program runs perfectly, the error
seems to be here but don't know what could it be**/
while(iterador<conversacion->getVectorSize()-1){
cout << persona1->sendResponse(conversacion, iterador)<<endl;
cout << persona2->sendResponse(conversacion, iterador)<<endl;
}
在conversacion.cpp文件
Conversacion::Conversacion(){}
Conversacion::~Conversacion(){}
void Conversacion::getConversacion(string lineaIn){
conversacion.push_back(lineaIn);
}
string Conversacion::getLinea(int iteradorIn){
return conversacion[iteradorIn];
}
int Conversacion::getVectorSize(){
return conversacion.size();
}
在persona.cpp文件
Persona::Persona(string nombreIn, int edadIn, string animoIn){
nombre=nombreIn;
edad=edadIn;
animo=animoIn;
}
Persona::~Persona(){}
string Persona::getNombre(){
return nombre;
}
int Persona::getEdad(){
return edad;
}
string Persona::getAnimo(){
return animo;
}
string Persona::sendResponse(Conversacion * &conversacionIn, int & iteradorIn){
string mensaje;
if(conversacionIn->getLinea(iteradorIn).compare("hola")){
mensaje=conversacionIn->getLinea(iteradorIn).append(conversacionIn->getLinea(iteradorIn+1));
iteradorIn++;
return "hola" + mensaje;
}else if(conversacionIn->getLinea(iteradorIn).compare("y como estas?")==0){
mensaje=conversacionIn->getLinea(iteradorIn);
iteradorIn++;
return animo + mensaje;
}else if(conversacionIn->getLinea(iteradorIn).compare("cuantos años tienes?")==0){
mensaje=conversacionIn->getLinea(iteradorIn);
stringstream edadc;
string stredad;
edadc << edad;
stredad=edadc.str();
iteradorIn++;
return stredad+ mensaje;
}else if(conversacionIn->getLinea(iteradorIn).compare("chao")==0){
iteradorIn++;
return "chao";
}
}
這是錯誤即時得到上控制檯:
Error in `./exe': free(): invalid pointer: 0x00007ffefe07dbf0 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7fb724f1b7e5]
/lib/x86_64-linux-gnu/libc.so.6(+0x7fe0a)[0x7fb724f23e0a]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7fb724f2798c]
./exe[0x402bb1]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7fb724ec4830]
./exe[0x401779]
一個奇怪的是,在'sendResponse'你'iteradorIn ++;'* *後的'return'聲明。這意味着增量不會發生,因爲您已經返回到調用函數。 –
請[編輯]您的問題以提供[mcve]。 –
@BoPersson你說得對,已經糾正了我的錯誤 –