Я работаю над заданием для моего класса программирования 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, если это что-то меняет.Это не первый выбор компиляторов, но наш учитель хочет, чтобы мы его использовали.