Функция C++ не возвратится

У меня есть функция, которую я вызываю, который работает полностью туда, где она должна возвратиться, но не возвращается. Если я ухаживаю за чем-то для отладки в самом конце функции, это отображено, но функция не возвращается.

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;
  }
6
задан Mike 1 May 2010 в 16:24
поделиться

3 ответа

Либо в вашей программе есть какая-то другая строка кода, которая печатает «здесь сделано», либо вы повредили стек и повлияли на адрес возврата. Но я не вижу в стеке буферов, которые можно было бы переполнить.

Вы пробовали использовать отладчик?

4
ответ дан 17 December 2019 в 00:05
поделиться

Установите точки останова, выполните шаги в отладчике и посмотрите, где фактическое выполнение начинает отличаться от того, что вы думаете должно случиться.

При быстром взгляде на ваш код вы должны получить второе сообщение, но просмотр в отладчике того, что происходит на самом деле, поможет больше, чем любые теоретические размышления о том, что может пойти не так. Также похоже, что у вас будет утечка памяти повсюду, я не вижу никаких delete для ваших new s.

2
ответ дан 17 December 2019 в 00:05
поделиться

Если appendData () продолжает добавлять в i_blocks, структура данных продолжает расти, как и i_blocks.size (). Это никогда не выйдет !!!

   //Loop through all the block addresses to get the actual data
   for(i=0; i < i_blocks.size(); i++){
    appendData(i_blocks[i], data);
   }
1
ответ дан 17 December 2019 в 00:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: