kyaryunha   6년 전

음ㅁ.. 일단 백준에선 바로 틀렸습니다..!!가 뜨고요..!


온라인 컴파일러에선 이런저런 예제, 문제에서 제시한 예제, (A,B) (abcdef, abcdeef) 등등 돌려봤을때, 틀리지 않았고요.


c언어에서는 키자마자 바로, asdf(cpp 파일명).exe의 작동이 중지되었습니다. 라고 뜹니다.

 main에서 0이 아닌 값을 리턴하는 것을 보아, 그리고 main 열자마자 printf 해봐도 출력 안하는 것을 보아, main함수 들어가기도 전에 문제를 일으키는 것 같습니다


왜 이럴까요..ㅇㅁㅇ (컴파일러쪽은 아예 모르는지라 ㅠㅜ 어디서 문제를 일으키는건지 알 수가 없네요)


코드는 아래와 같습니다.

온라인 컴파일러는

http://www.compileonline.com/c...

를 사용했습니다. (c++11)


코드블럭에서의 컴파일러는 요거 사용했고요.

aadfd.PNG

djm03178   6년 전

스택 크기의 제한 때문에 그렇습니다.

지역 변수는 스택 영역에 할당이 되는데, 이 영역의 크기는 디폴트로 윈도우에서는 1MB로, 리눅스에서는 8MB로 제한되어 있습니다. 빌드할 때 설정을 바꿀 수 있지만, 일반적으로 컴파일 후 실행하면 런타임 에러가 발생할 수 있습니다.

int dp[1005][1005]; 의 크기가 약 4MB이기 때문에, 어떤 시스템에서는 터지고, 어떤 시스템에서는 잘 돌아가게 됩니다.

jeongki0913   6년 전

 for(int i=0;i<alen;i++)
    {
        for(int j=0;j<blen;j++)
        {

if(a[i]==b[j]) dp[i][j]=dp[i-1][j-1]+1;

else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);


여기에서 i나 j = 0이면 i-1 이나 j -1은 값이 어떻게 될까요...? 

kyaryunha   6년 전

@djm03178 오오 ((신기)) 혹시 전역으로 하면 몇MB까지인가요?


@jeonki0913 아앗..!! 그런 문제점이 있었군요..!!(등잔밑이 어둡ㅂ.....) 알려주셔서 감사합니다..! :)

djm03178   6년 전

전역으로 하면 제한은 없습니다. 물리 메모리가 버티고 운영체제가 허용하는 게 제한입니다.

kyaryunha   6년 전

오오오..!! ((처음 알았습니다..!! )) 알려주셔서 감사합니다..! :)

두분이 알려주신 2가지 사항 고치니 바로 맞았습니다 떠서 행복해졌어요..! :) 감사합니다 :)

댓글을 작성하려면 로그인해야 합니다.