Почему я получаю ошибку EXC_BAD_ACCESS при попытке создать два суффиксных массива?

Моя задача заключается в поиске самой длинной общей подстроки в двух текстовых файлах с использованием массивов суффиксов. Я сделал следующее:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <fstream>

int main() {
char* charArrayA = charArrayFromTxtFile("~/txt_file1.txt");
char* charArrayB = charArrayFromTxtFile("~/txt_file2.txt");

int lengthA = strlen(charArrayA);
int lengthB = strlen(charArrayB);

char* suffixArrayA[lengthA];
char* suffixArrayB[lengthB];

for(int i = 0; i < lengthA; i++) { suffixArrayA[i] = &charArrayA[i]; }
for(int i = 0; i < lengthB; i++) { suffixArrayB[i] = &charArrayB[i]; }
charArrayA[lengthA] = 0;
charArrayB[lengthB] = 0;

...

return 0;
}

Однако, когда я скомпилировал эту часть кода, я получил следующий флаг ошибки в строке, содержащей второй цикл for:

Поток 1: EXC_BAD_ACCESS (код = 2, адрес = 0x7ffeef1446e0)

Для справки, функция, которую я использую для создания charArrayA и charArrayB:

char* charArrayFromTxtFile(std::string fileName) {
std::ifstream filename;             // Variable for file
int length;                         // Number of characters
filename.open(fileName);
filename.seekg(0, std::ios::end);   // Goes to the end of the file
length = filename.tellg();          // Location of the end (index, length of file)
filename.seekg(0, std::ios::beg);   // Go back to the beginning
char* charArray = new char[length]; // Allocate a char array of "length" file
filename.read(charArray, length);   // Write characters from txt file into the char array
filename.close();

return charArray;
}

Кто-нибудь знает, почему так случается, что первый текстовый файл не доставляет мне проблем, а второй? Я буду признателен за любые рекомендации. Большое спасибо, ребята!

Постскриптум Это мой первый вопрос о работе со стеком, так что, надеюсь, я был достаточно ясен. Я буду признателен за любые отзывы в форме вопроса! : D

0

Решение

Ваша функция charArrayfromTxtFile () не является нулевой, заканчивая строку charArray.

charArray[length - 1] = '\0';

Это должно быть сделано до того, как вы выполните итерацию по ним с помощью strlen ().

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]