Ошибка нарушения прав доступа с новой командой - PullRequest
0 голосов
/ 26 февраля 2012

Я работаю над заданием для моего класса программирования GUI, в котором мы должны сделать программу для Windows, которая отображает содержимое файла в шестнадцатеричном формате.У меня есть класс, который содержит текст и создает гекс в формате строки.

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

Я выполнил поиск, но не смог найти ответ.

Класс имеет следующие переменные-члены:

char* fileText;   
char** Lines;
int numChars;  
int numLines;  
bool fileCopied;

Мой конструктор:

Text::Text(char* fileName){  //load and copy file.
   fileText = NULL;
   Lines = NULL;
   fileCopied = ExtractText(fileName);
   if ( fileCopied ) {
      CreateHex();
   }//endif
}//end constructor 

ExtractText загружает файл, данный конструктору, и копирует его в большойстрока.

bool Text::ExtractText(char fileName[]){
   char buffer = '/0';    //buffer for text transfer
   numChars = 0;              //initialize numLines
   ifstream fin( fileName, ios::in|ios::out );  //load file stream
   if ( !fin ) {     //return false if the file fails to load
      return false;
   }//endif

   while ( !fin.eof() ) {      //count the lines in the file
      fin.get(buffer);
      numChars++;
   }//endwh

   fileText = new char[numLines];  //create an array of strings, one for each line in the file.

   fin.clear();           //clear the eof flag
   fin.seekg(0, ios::beg); //move the get pointer back to the start of the file.

   for ( int i = 0; i < numChars; i++ ) { //copy the text from the file into the string array.
      fin.get(fileText[i]);
   }//endfr
   fileText[numChars-1] = '\0';
   fin.close();
   numLines = (numChars % 16 == 0) ? (numChars/16) : (numChars/16 + 1);
   return true;
}//end fun ExtractText

Затем идет код проблемы.В функции CreateHex первая строка - это попытка создать массив символьных указателей.

void Text::CreateHex(){
    Lines = new char*[numLines];

Как только программа запускает эту строку кода, именно тогда я получаю нарушение прав доступа.Я не совсем уверен, в чем проблема, потому что я использовал этот же метод раньше в предыдущей программе.Единственным отличием было имя указателя.Я использую Borland C ++ 5.02, если это что-то меняет.Это не первый выбор компиляторов, но наш учитель хочет, чтобы мы его использовали.

1 Ответ

0 голосов
/ 26 февраля 2012

При выполнении строки

fileText = new char[numLines]

Переменная numLines еще не была инициализирована.Как переменная-член, она инициализируется значением 0, поэтому вы выделяете пустой массив для fileText.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...