Lỗi push stack c++

Em làm bài tập lập trình C++ mô phỏng stack thì gặp 1 vấn đề khó hiểu mong anh chị giải thích hộ em!
khi em stack push từ 0-9 thì:
(1)

stack.push(i);//với i là con số  10 dòng


(2)

while(i< 10)
{
   stack.push(i);
   i++;
}

thì (1) ko có chuyện gì xảy ra hết,(2) thì lại có chuyện thông báo code dump? cho em hỏi thực sự chuyện gì đang xảy ra.
build trên ubuntu.
code main:

CStack stack(0);
 stack.Push(1);
 stack.Push(2);
 stack.Push(3);
 stack.Push(4);
 stack.Push(5);
 stack.Push(6);
 stack.Push(7);
 stack.Push(8);
 stack.Push(9);

 char i = 0;
 while(i < 10)
 {
  stack.Push(static_cast<int32_t>(i));
  ++i;
 } 

Đó chỉ là code chạy, còn code cài đặt nữa.

1 Like

Lỗi do code của bạn chứ đâu. Đưa implementation của Stack lên coi nào.

1 Like

Ham push

 void CStack::Push(const int32_t data)
 {
  this->stack[this->counter] = data;
  (this->counter)++;
 }

ham khoi tao: MAX 10

 CStack::CStack(int32_t data)
 {
  try{
     stack = new int32_t[MAX];
     counter = 1;
     stack[0] = data;
  }
  catch(bad_alloc&)
  {
   cout<<"ko the tao stack"<<endl;
  }
 } 

co gi may anh chi giup em.

Dự là MAX = 10 :smiley: cắm breakthru vào chỗ counter là ra ngay.

2 Likes
  • Ko anh khi em chạy 10 và cho xuất giá trị stack[5] thì bình thường còn chạy vòng while là hiện hên code dump!
  • Còn counter có kiểu uint8_t thì em tự làm khó chính mình khi mà cout nó ra nó ra bảng mã ASCII.

Bạn đưa code lên đâu đó, ví dụ cpp.sh, rồi lấy link cho mọi người xem thử.

1 Like

Link:
main.cpp: https://ideone.com/G4LA8x
CStack.hpp: https://ideone.com/8XSWuY
CStack.cpp: https://ideone.com/l7CYPI

Không biết mình có hiểu sai vấn đề hay không, nhưng mình thấy bạn đã đẩy 10 giá trị “bằng tay” vào trước nên dĩ nhiên stack đã đầy, rồi bạn lại đẩy thêm 10 giá trị bằng while thì nó báo segmentation fault là đúng rồi :v
Stack không thể “co dãn” mà cũng không kiểm tra full ở hàm Push nữa :v

1 Like

Hóa ra hai đoạn mã trên chạy liên tiếp :expressionless: mà ở trên thớt viết cứ như hai trường hợp khác nhau vậy.

1 Like

Try catch nên viết cả catch everythings (…) và log ra FUNCTION với LINE sẽ dễ debug hơn. Code C++ theo java là tốt nhất

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?