Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: [ Solved ]Lỗi vói con trỏ

  1. #1
    Ngày gia nhập
    03 2008
    Bài viết
    13

    Wink [ Solved ]Lỗi vói con trỏ

    Mình bị một lỗi rất kì hoặc mong các cao thủ chỉ mình


    Code:
    class node{
    	node *next;
    	int data;
    public:
    	friend class stack;
    };
    class stack
    {
    public:
    	node *head,*tail;
    	stack(){head=tail=NULL;}
    	~stack()
    	{
    		if(isempty()){delete head;delete tail;}
    		else
    		{
    			while(head!=tail)
    			{
    				node *p;
    				node *q;
    				p=q=head;
    				head=p->next;
    				q->next=NULL;
    				delete q;
    				
    			}
    			delete q; (nó báo lỗi ở đây,nếu mình bỏ dòng này thì nó ko hề bị lỗi
    		}
    
    
    	}
    	int isempty();
        int push(int x);
    	int pop();
    };
    int stack::isempty()
    {
    	if(head==NULL)return 1;
    	return 0;
    }
    int stack::push(int x)
    {
    	node *p;
    	p=new node;
    	if(p==NULL)return -1;//ko du bo nho de add vao//
    	p->data=x;
    	if(this->isempty()){head=tail=p;return 1;}
    	p->next=head;
    	head=p;
    	return 1;
    
    }
    int stack::pop()
    {
    	if(isempty())return -2;//pop ko duoc vi stack rong//
    	int y;
    	node *p;
    	y=head->data;
    	if(head==tail){head=tail=NULL;return y;};
    	p=head;
    	head=head->next;
    	p->next=NULL;
    	delete p;
    	return y;
    }
    void main()
    {
    	stack s;
    	s.push(6);
    	s.push(7);
    	s.push(8);
    	int x;
    	x=s.pop();
    
    }
    Mình chạy và bị báo 2 lỗi:
    error C2065: 'q' : undeclared identifier
    error C2541: delete : cannot delete objects that are not pointers

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    delete q; (nó báo lỗi ở đây,nếu mình bỏ dòng này thì nó ko hề bị lỗi
    C++ Code:
    1. while(head!=tail)
    2.             {
    3.                 node *p;
    4.                 node *q;
    5.                 p=q=head;
    6.                 head=p->next;
    7.                 q->next=NULL;
    8.                 delete q;
    9.                
    10.             }
    p và q có scope ::while !

  3. #3
    Ngày gia nhập
    03 2008
    Bài viết
    0

    Theo mình thì nên đưa *head, *tail phần private !
    Code:
    	~stack()
    	{
    		node *p;
    		node *q;
    		if(isempty()){delete head;delete tail;}
    		else
    		{
    			while(head!=tail)
    			{			
    				p=q=head;
    				head=p->next;
    				q->next=NULL;
    				delete q;
    				
    			}
    			delete q;
    		}
    
    
    	}
    Vậy thì hết lỗi ! Cứ mỗi vòng while sẽ khởi tạo 1 trỏ p và q khác !( mình nghĩ là sai như vậy _T)
    Cho head trỏ p->next gòi xóa p cũng đc mà ! Đúng không ta ? Không cần dùng đến 2 trỏ

Các đề tài tương tự

  1. làm việ vói thread lỗi hiển thị
    Gửi bởi gaonline31293 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 20-05-2013, 09:54 AM
  2. Viết chương trình cài đặt đặt chương trình suy diễn tiến vói logic mệnh đề
    Gửi bởi thanhlongltvp trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 11
    Bài viết cuối: 09-06-2011, 06:02 PM
  3. Mọi người ai làm Database bán hàng rùi chỉ mỉnh vói nhé
    Gửi bởi trantran trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 1
    Bài viết cuối: 15-10-2010, 12:02 AM
  4. Bài Tập In File Theo Khuôn Dạng Khó Qua' Giúp Mình Vói
    Gửi bởi toidohang trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 09-08-2009, 09:34 PM
  5. bài này của mình ko chạy các bạn giúp mình vói
    Gửi bởi keobong trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 26-11-2008, 08:37 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn