내 작업에는 접미어 배열을 사용하여 두 개의 txt 파일에서 가장 긴 공통 부분 문자열을 찾는 작업이 포함됩니다. I는 다음했을 : I 코드의 일부를 컴파일 할 때, 그러나두 접미어 배열을 만들려고 할 때 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;
}
, I 얻는 제를 포함하는 라인에서의 다음의 에러 플래그-for 루프
스레드 1 : EXC_BAD_ACCESS (코드 = 2, 주소 = 0x7ffeef1446e0) 참고로
, 내가 charArrayA과 charArrayB 만드는 데 사용하는 기능은 다음과 같습니다이 경우 Fi를 할 이유
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 파일이 나에게 어떤 문제도주지 않지만 두 번째 문제는 무엇입니까? 나는 어떤 지침을 주셔서 감사하겠습니다. 고마워요!
P. 이것은 내 첫 번째 stackoverflow 질문, 잘하면 충분히 분명했다. 나는 또한 질문 양식에 어떤 의견을 주셔서 감사합니다! : D
크기가 n 인 배열의 경우 액세스 할 수있는 가장 높은 인덱스는'n-1'입니다. 'charArrayA [lengthA]'와'charArrayB [lengthB]'줄은 항상 정의되지 않은 동작 인 배열 끝을지나 한 요소에 접근합니다. –
'suffixArrayA [lengthA]'는 가변 길이 배열이며 표준 C++가 아닙니다. 확장자에 따라 일부 컴파일러에서 지원되지만 이동식 구조는 아닙니다. 특히 gcc는 기본적으로이 기능을 지원합니다. –
'charArrayFromTxtFile'에서 이미'std :: string'을 사용하고 있으므로 동적 배열에 소유하고있는 원시 포인터를 반환하는 이유를 알지 못합니다. 다른 std :: string을 반환하고 모든 것을 훨씬 간단하고 안전하게 만들 수 있습니다. –