일부 코딩 작업을했는데 세그멘테이션 오류가 발생했습니다. 나는 그것이 작동하도록 최선을 다했으나 실패했습니다. 이제 저는 도움을 청합니다. 이것은 내 코드입니다 :C++ 프로그램이 세분화 오류를 가져옵니다
#include <iostream>
#include <string>
using namespace std;
int main()
{
string symbols = "ABCDEFGHIJKLMNOPRSTUVYZ_";
int sim, a = 0;
sim = symbols.size();
string temp[sim];
while(sim > 0)
{
sim--;
temp[sim] = symbols.substr(sim, 1);
cout << temp[sim] << endl;
}
}
글쎄,이 작품은 잘 작동하지만 약간 변경하면 충돌이 발생합니다.
나는 변경 :
while(sim > 0)
{
sim--;
temp[sim] = symbols.substr(sim, 1);
cout << temp[sim] << endl;
}
이 사람 :
while(a < sim)
{
a++;
temp[a] = symbols.substr(a, 1);
cout << temp[a] << endl;
}
내가 SIGFAULT를 얻을
, 내가 정말 잘못 이해하지 않습니다. 디버거를 사용했는데 실제로 충돌하는 줄을 표시하지 않습니다. 단지 다음을 보여줍니다.프로그램 수신 신호 SIGSEGV, 세그먼트 오류. temp
이 유효 인덱스를 sim-1
-0
을 가지고 있지만, 당신은 즉시 증가, 그래서 sim
이되고, 다음 temp[a]
에 액세스 - __gnu_cxx::__exchange_and_add(int volatile *, int)()()
프로그램의 어느 시점에서 충돌이 발생했는지 알고 있습니까? (처음 실행하려고 할 때, 끝날 때 등) – Daniel
정확성을 위해 "segfault"라는 철자가 붙어 있습니다. "segmentation fault"의 줄임말. 시그 (SIG)는 특정한 의미를 지니고 있습니다. 즉, 그 값은 신호를 나타내는 상수입니다. 이 경우 철자가 "SIGSEGV"입니다. 하나 또는 다른 것이 적절하지만 나중에 다소 선택해야합니다. – cHao
cHao -> 좋아요. 다음 번에 바로 할게요 ... 해결해 주셔서 감사합니다. 루프의 끝까지 그것은 잘 작동합니다, 고마워요 :) – iCoRe