वापस नहीं आएगा मेरे पास एक ऐसा फ़ंक्शन है जिसे मैं कॉल कर रहा हूं जो इसे वापस लौटाए जाने के लिए सभी तरह से चलता है लेकिन वापस नहीं आता है। अगर मैं फ़ंक्शन के बहुत अंत में डिबगिंग के लिए कुछ कहता हूं, तो यह प्रदर्शित हो जाता है लेकिन फ़ंक्शन वापस नहीं आता है।सी ++ फ़ंक्शन
fetchData वह फ़ंक्शन है जिसका मैं जिक्र कर रहा हूं। इसे outputFile द्वारा बुलाया जाता है। cout डिस्प्ले "यहां किया गया" लेकिन "डेटा प्राप्त नहीं हुआ"
मुझे पता है कि यह कोड गन्दा है लेकिन क्या कोई इसे समझने में मेरी सहायता कर सकता है?
धन्यवाद
//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;
}
आप जो कुछ कर रहे हैं वह "' printf' डीबगिंग "कहलाता है, और इसकी आमतौर पर अनुशंसा नहीं की जाती है। आपको एक वास्तविक डीबगर का उपयोग करने की आवश्यकता होगी। इसके अलावा, प्रति टैब स्तर पर एक से अधिक स्थान इंडेंट करें। यह पढ़ना असंभव है ... – rlbond
@rlbond मैं लगभग सभी डिबगिंग करता हूं "प्रिंटफ डीबगिंग" - अभ्यास के साथ बिल्कुल कुछ भी गलत नहीं है। –
प्रिंटफ डिबगिंग असफलता के सामान्य क्षेत्रों को समझने के लिए बहुत अच्छा काम करता है, लेकिन विवरण के लिए, डिबगर्स अधिक मदद करते हैं। – ssube