배열로 스택구현하는건데 생성자에서 배열의 크기를 동적할당 받아서 해야하는 조건이 있어
내가 짜본 소스는 이건데
--------------------------------------------------
Stack::Stack(int bulk)
{
arr = new char(bulk+1);
top = 0;
size = bulk;
}
Stack::~Stack()
{
delete[] arr;
}
int main()
{
int r_bulk ;
char text;
cout << "스택크기를 입력하세요 :";
cin >> r_bulk;
Stack stack(r_bulk);
for(int i=0; i<r_bulk; i++)
{
cout << endl << "스택에 저장할 숫자를 입력하세요 : ";
cin >> text;
stack.push(text);
}
return 0;
}
----------------------------------------------
코드상의 에러는 하나도 없는데 (컴파일하고서도) 실행해서
스택크기 입력하고 ( EX) 3 을 입력) push하려고 문자 3개 입력하면
마지막 문자 입력할때 디버깅 에러가 뜨더라고...
오류는 스샷첨부할게
형들 이거도와줘 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ 뿌잉뿌잉
메모리 해제할때가 문제인거같은데 뭐가 문젠지 참 그러네..
도와주는분 쿼터쏩니다 이질문포함하여 조금더있긴합니다만ㅋ
arr = new char[bulk+1];
메모리할당 문제 맞음
코모로 // 코드자체에는 에러없는데 실행하고 값 입력하면 디버깅에러나옴.. 스샷대로
ㄱㅁㄱㅁ // bulk크기만큼만 할당해도 마찬가지임..
코로모 // 저 위에 스샷처럼 오류 안뜨나여? 명록이에 스샷 한개만 남겨주셈.. 실행되는거.. ㅠ
요즘 일하면서 C#만 봐서 좀 헛갈리긴 하네. 메모리 할당받을때 new char(bulk + 1) 하면 bulk값에 30을 설정하면 arr 포인터가 31번 주소를 설정하게 되있잖아
대괄호를 써야 char 배열이 메모리 할당이 되지
에러 메세지도 엉뚱한 메모리에 데이터 때려박았다고 뜨잖아
ㄱㅁㄱㅁ/ 좀 더 쉽게 풀어서 설명해줄수있음? 내가 진짜 좆병시이라그래..
ㄱㅁㄱㅁ // 어디에 대괄호를 써야함??;;
내가 처음 단 댓글에 써놨잖아요
코로모 // 좀 더 쉽게 설명되나.. 입문자로써 너무 어렵다 메모리할당하고 해제하는거
new char[bulk+1]; 이건 bulk+1 사이즈의 char 배열을 만드는 거고
new char(bulk+1); 이건 bulk+1의 ascii값을 가지는 문자열 값을 하나 생성하는거고
문자열이 아니라 char값
ㄱㅁㄱㅁ// 형 감사 ㅠㅠㅠㅠㅠ 드뎌 해결됨
ㄱㅁㄱㅁ // 뭐라도 쏴주고싶다 명록이비밀글로 카톡이나 그런거로 기프티콘 받을만한거로 연락처줘
질답글 올린거 지우지 말고 딴놈이 찾고싶을때 볼수있게 유지나 해
ㄱㅁㄱㅁ // 고마워 형 .. 좀 따가 링크리스트도 스택구현해볼건데 그때도 잘부탁해 ㅠㅠ 한번에 완성했으면 좋겠땅