topcoder에서 발견 된 오래된 문제를 해결하려고합니다. 나는 문자열 배열에서 요소의 수를 찾으려고 노력하는 데 즉시 고생했다. 여기 내 코드는문자열 배열의 요소 계산 중 분할 오류가 발생했습니다. C++
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
using namespace std;
class MiniPaint {
private:
size_t numLines;
public:
int leastBad(string picture[], int maxStrokes) {
numLines = 0;
while (!picture[numLines].empty()) {
numLines++;
}
cout << numLines << '\n';
return 0;
}
};
int main() {
MiniPaint instance;
string picture[] = {"BBBBBBBBBBBBBBB", "WWWWWWWWWWWWWWW", "WWWWWWWWWWWWWWW", "WWWWWBBBBBWWWWW"};
instance.leastBad(picture, 10);
return 0;
}
이 코드는 나에게 세그먼트 오류를 제공합니다. 뭔가 잘못 될 것입니다, 코드는 요소의 수를 계산하는 기능에 대해 약간 과도하지만 물론 더 많은 기능을 포함하도록 클래스를 확장하려고합니다. 누군가가 여기에서 잘못되고있는 것을 설명 할 수 있다면 감사 할 것입니다! 미리 감사드립니다.
EDIT : I 어레이의 실제 요소를 표시하는, while 루프에
cout << picture[numlines] << '\n';
로 코드를 확장 할 때, 첫 번째 네 개의 적당한 문자열 도시하고 든 끝없이 단말기에 공간을 인쇄 . 따라서 문제는 그림에 4 개의 요소 만 있더라도
picture[4].empty()
이 true를 반환하지 않는다는 사실에 있습니다.
배열의 끝 부분을 실제로 비우기위한 'empty()'문자열이 없습니다. –
그림 [4]는 배열에서 누락 된 다섯 번째 요소를 반환합니다. C/C++에서 배열 인덱스는 0부터 시작합니다. 알 수없는 메모리에 액세스하고 있으며 프로그램에서 문자열이라고 가정하고 empty() 함수를 호출합니다. 실제로는 그렇지 않을 수 있습니다. 이로 인해 세그먼트 오류가 발생합니다. –
문자열 리터럴로 만든 배열에만 자동으로 종료 표시가 제공됩니다. – molbdnilo