我的任务涉及使用后缀数组在两个txt文件中找到最长的公共子字符串。我已经完成以下工作:

#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;
}


但是,当我编译这部分代码时,在包含SECOND 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;
}


有人知道为什么第一个txt文件不会给我带来任何麻烦,而第二个txt文件会给我带来麻烦吗?我将不胜感激。非常感谢你们!

附言这是我的第一个stackoverflow问题,因此希望我已经足够清楚。我也会很感激任何问题形式的反馈! :D

最佳答案

您的charArrayfromTxtFile()函数不是null终止字符串charArray。

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


必须先完成此操作,然后再使用strlen()遍历它们。

关于c++ - 尝试创建两个后缀数组时,为什么会出现EXC_BAD_ACCESS错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47801279/

10-11 22:55
查看更多