cout 이 실행되면 프로그램이 종료되는 문제
글쓴이: jackcha / 작성시간: 수, 2020/02/12 - 8:05오후
c++ 프로그램을 배우고 있습니다.
아래의 sample program 을 eclipse 에서 실행하면 문제가 없습니다.
동일한 프로그램을 cmd 창에서 g++ 로 compile 및 실행을 하면 cout 의 첫번째 output 이 출력되고 프로그램이 종료 됩니다. 왜 그런지 알고 싶습니다.
구글링을 통해 cout.flush(), endl 등을 사용해 보라는 내용을 적용해도 문제가 해소되지 않습니다.
조언을 부탁 드립니다.
프로그램 실행결과
-----------------------
Book title : Learn C++ Programming
<<1초정도 후에 프로그램 종료>>
-----------------------
#include <iostream> #include <cstring> using namespace std; void printBook( struct Books book ); struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; int main() { struct Books Book1; // Declare Book1 of type Book struct Books Book2; // Declare Book2 of type Book // book 1 specification strcpy( Book1.title, "Learn C++ Programming"); strcpy( Book1.author, "Chand Miyan"); strcpy( Book1.subject, "C++ Programming"); Book1.book_id = 6495407; // book 2 specification strcpy( Book2.title, "Telecom Billing"); strcpy( Book2.author, "Yakit Singha"); strcpy( Book2.subject, "Telecom"); Book2.book_id = 6495700; // Print Book1 info printBook( Book1 ); // Print Book2 info printBook( Book2 ); return 0; } void printBook( struct Books book ) { cout << "Book title : " << book.title <<endl; cout << "Book author : " << book.author <<endl; cout << "Book subject : " << book.subject <<endl; cout << "Book id : " << book.book_id <<endl; }
Forums:
?!
?!
https://ideone.com/V7KIB3
문제 원인이 코드보다는 환경에 있는 것 같아 보이는데, 구체적으로 어떤 환경에서 빌드 및 실행을 했는지 궁금하군요.
Windows 10 에 g++ (MinGW.org
Windows 10 에 g++ (MinGW.org GCC-6.3.0-1) 6.3.0 환경입니다.
CMD 창에서 Compile 은 g++ "program name.cpp" 이렇게 하고 생성되는 a.exe 를 실행 했습니다.
cout 을 printf 문으로 바꾸면 이상없이 실행 됩니다.
환경이나 스택 관련한 이슈같은데 아래 처럼 해보세요.
환경이나 스택 관련한 이슈같은데 아래 처럼 해보세요.
결과는 동일합니다. 한가지 "<< endl" 을
결과는 동일합니다. 한가지 "<< endl" 을 제거하니 정상 실행 됩니다. "<< endl" 이 부분이 왜 실행이 안되는지에 초점을 맞춰야 될것 같습니다. 다시 한번 검토 부탁 드립니다.
gcc 나 glibc 에 버그가 있나보죠. clang
gcc 나 glibc 에 버그가 있나보죠. clang 으로 컴파일 해보세요.
clang, musl 이나, MS에서 제공하는 개발
clang, musl 이나, MS에서 제공하는 개발 툴이 있을 것 같은데 그걸 써보세요.
gcc (glibc) 는 성능이 좋지 않습니다. 그리고 버전이 6번대인데 옛날것 같으니 gcc 최신 버전으로 해보시던가요. MS에는 이미 훌륭한 개발 툴들이 있는데,, 굳이 gcc를 사용할 필요가... gcc 로 컴파일하면 glibc (libc)와 링킹되는 건 알고 계신지요.
gcc는 그렇게 성능이 나쁘지 않습니다
어떤 환경을 쓰시고 어떤 응용을 사용하느냐에 다르겠습니다만, gcc의 성능이 상대적으로 ICC, Studio Compiler, Clang 등에 비해 나쁘지는 않습니다. 보통 저런 급의 컴파일러들은 어떤 데서는 좋고 어떤 데서는 나쁘고 한 수준이에요. MS 컴파일러와 gcc 비교도 마찬가지일 겁니다.
훌륭한 개발 툴들이라는 게 소프트웨어 생산성과 연관된 거라면 그럴 수도 있는데 생산된 코드의 성능은 다른 얘기죠.
관리자분께서 댓글도 삭제하나보죠?
관리자분께서 댓글도 삭제하나보죠?
gcc 버전이 6번대이면 구버전이니 신버전으로 업뎃후에 해보시거나,
MS에도 개발툴들이 있으니 MS에서 제공하는 개발툴을 사용해보세요.
gcc 로 컴파일하면 glibc (libc)가 링킹됩니다. 그러니까.. gcc 버그인지 glibc 버그인지 알 수가 없으니, clang + musl 으로 컴파일해보시던가요. clang + musl 로 컴파일하려면 설정도 해야하고.
gcc 로 컴파일하면 glibc 링킹되는거 알고 계신지요. <=== 이거 때문에 댓글 삭제하신 건가요?
삭제됐다는 그 댓글에 무슨 내용이 있었는지 무척
삭제됐다는 그 댓글에 무슨 내용이 있었는지 무척 궁금하군요
바로 위위에 있는 댓글인데요...https:/
바로 위위에 있는 댓글인데요...
https://kldp.org/comment/634475#comment-634475
아까보니까 있네요. 파폭 버그인가봐요. 타 사이트에 댓글도 나왔다 안 나왔다 그러는거보니.
파폭에서 캐싱에 문제 있나보네요.
링크가 libstdc++ 요개 링크되네요. libc 가 아니라...제가 실수했네요. 죄송
제가 오해했네요. 관리자분께 죄송합니다.
크롬쓰니까 다 잘 되네요. 파폭 저번에 업뎃 후에 버그가 몇개 생긴거 같네요.
파폭 버그인줄도 모르고... 크롬쓰니까 문제 없이 잘 되네요.
그리고 위에 cpp 코드는 리눅스에서 돌려보니 잘 됩니다.
초기화 문제일 수도 있을 것 같은데
제가 언어 표준을 꿰고 있는 게 아니라서 잘못 생각하는 것일 수도 있습니다. 얼핏 보기에 초기화 문제일 것 같네요.
이 부분을 아래처럼 해보세요.
뭐 다 아시겠지만, main() 함수 내에
뭐 다 아시겠지만, main() 함수 내에 strcpy 로 초기화 하는 코드가 있네요.
제가 볼 때는, 출력을 시키지만, 출력이 화면에 찍히기도 전에 종료되는게 문제인 것 같거든요.
즉, sync 로 동작하는 걸 바라는데, async 로 출력이 되면서 프로세스가 종료가 된 것은 아닌가...
이런 생각이 듭니다.
맨 마지막 줄에 sleep (1); 을 넣어보면 어떨까.. 그런 생각이 듭니다.
...
당연히 영향을 주면 안 되긴 하지만 혹시나 strcpy 뒤에도 남아 있는, 각 버퍼의 널 캐릭터 뒤에 있는 쓰레기값이 영향을 주는지 보고 싶어서요.
댓글 달기