Tengo una función a la que llamo que corre hasta donde debe regresar, pero no regresa. Si configuro algo para la depuración al final de la función, se muestra pero la función no regresa.La función de C++ no devolverá
fetchData es la función a la que me refiero. Se llama por outputFile. cout muestra "hecho aquí" pero no "datos obtenidos"
Sé que este código es complicado pero ¿alguien me puede ayudar a resolverlo?
Gracias
//Given an inode return all data of i_block data
char* fetchData(iNode tempInode){
char* data;
data = new char[tempInode.i_size];
this->currentInodeSize = tempInode.i_size;
//Loop through blocks to retrieve data
vector<unsigned int> i_blocks;
i_blocks.reserve(tempInode.i_blocks);
this->currentDataPosition = 0;
cout << "currentDataPosition set to 0" << std::endl;
cout << "i_blocks:" << tempInode.i_blocks << std::endl;
int i = 0;
for(i = 0; i < 12; i++){
if(tempInode.i_block[i] == 0)
break;
i_blocks.push_back(tempInode.i_block[i]);
}
appendIndirectData(tempInode.i_block[12], &i_blocks);
appendDoubleIndirectData(tempInode.i_block[13], &i_blocks);
appendTripleIndirectData(tempInode.i_block[14], &i_blocks);
//Loop through all the block addresses to get the actual data
for(i=0; i < i_blocks.size(); i++){
appendData(i_blocks[i], data);
}
cout << "done here" << std::endl;
return data;
}
void appendData(int block, char* data){
char* tempBuffer;
tempBuffer = new char[this->blockSize];
ifstream file (this->filename, std::ios::binary);
int entryLocation = block*this->blockSize;
file.seekg (entryLocation, ios::beg);
file.read(tempBuffer, this->blockSize);
//Append this block to data
for(int i=0; i < this->blockSize; i++){
data[this->currentDataPosition] = tempBuffer[i];
this->currentDataPosition++;
}
data[this->currentDataPosition] = '\0';
}
void outputFile(iNode file, string filename){
char* data;
cout << "File Transfer Started" << std::endl;
data = this->fetchData(file);
cout << "data fetched" << std::endl;
char *outputFile = (char*)filename.c_str();
ofstream myfile;
myfile.open (outputFile,ios::out|ios::binary);
int i = 0;
for(i=0; i < file.i_size; i++){
myfile << data[i];
}
myfile.close();
cout << "File Transfer Completed" << std::endl;
return;
}
Lo que está haciendo es algo llamado "depuración' printf', y generalmente no se recomienda. Necesitarás usar un depurador real. Además, sangra más de un espacio por nivel de pestaña. Esto es simplemente imposible de leer ... – rlbond
@rlbond casi toda la depuración que hago es "depuración de printf" - no hay absolutamente nada de malo en la práctica. –
La depuración de Printf funciona muy bien para descubrir las áreas generales de falla, pero para los detalles, los depuradores ayudan más. – ssube