Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 20 kết quả

Đề tài: Cấp Phát bộ nhớ cho con trỏ kiểu tự định nghĩa

  1. #1
    Ngày gia nhập
    08 2013
    Nơi ở
    Ngô Sài -Quốc Oai-Hà Tây
    Bài viết
    21

    Mặc định Cấp Phát bộ nhớ cho con trỏ kiểu tự định nghĩa

    mình làm danh sách liên kết mà báo lỗi not working , mình thử thì nó lỗi dòng cấp phát bộ nhớ dùng toán tử new mà không biết sai ở đâu , giúp mình nhé .
    Code:
    #include<iostream>
    #include<fstream>
    #include<cstdlib>
    #include<conio.h>
    using namespace std;
    
    typedef struct Node{
    	int data;
    	Node *next;
    }ListNode;
    
    typedef struct FirstNode* LinkedList;
    
    struct FirstNode{
    	ListNode* first;
    };
    
    LinkedList newList(char* filename);
    ListNode newListNode(int v);
    void printList(LinkedList l);
    void addFirst(LinkedList l, int v);
    void addLast(LinkedList l, int v);
    void removeFirst(LinkedList l);
    int findIndex(LinkedList l, int v);
    
    
    //main
    int main(){
    	int find,index;
    	LinkedList l;
    //  ------------------
    	cout<<"Danh Sach ban dau : "<<endl;
    	l=newList("numbers.txt");
    	printList(l);
    	getch();
    
    //	------------------
    	cout<<"Sau khi them gia tri 4 vao dau" <<endl;
    	addFirst(l,4);
    	printList(l);
    //  -------------------
    	cout<<"Sau Khi them gia tri 5 vao cuoi "<<endl;
    	addLast(l,5);
    	printList(l);
    //  -------------------
    	cout<<"Sau khi xoa phan tu dau tien "<<endl;
    	removeFirst(l);
    	printList(l);
    //  --------------------
    	cout<<"Nhap gia tri can tim kiem "<<endl;
    	cin>>find;
    	index=findIndex(l,find);
    	cout<<endl<<find <<"nam o phan tu thu "<<index<<endl;
    	getch();
    }
    
    
    LinkedList newList(char* filename){
    	LinkedList li;
    	int num;
    	ifstream f(filename);
    
    
    	ListNode* p=new ListNode;		// sai cai dong nay ...
    		f>>num;
    	p->data=num;
    	li->first=p;
    	cout<<p->data;
    
    	while(1){
    		if(f.eof())break;
    		cout<<p->data;
    		p->next=new ListNode;
    		p=p->next;
    		f>>num;
    		p->data=num;
    	}
    //	p->next=NULL;
    	f.close();
    	return li;
    }
    
    
    ListNode newList(int v){
    	ListNode a;
    	a.data=v;
    	return a;
    }
    
    void printList(LinkedList l){
    	ListNode *p;
    	p=l->first;
    	while(p!=NULL){
    		cout<<p->data<<" ";
    		p=p->next;
    	}
    }
    
    void addFirst(LinkedList l,int v){
    	ListNode a = newList(v);
    	ListNode *add=&a;
    	add->next = l->first;
    	l->first=add;
    }
    
    void addLast(LinkedList l,int v){
    	ListNode a=newList(v);
    	ListNode *add = &a;
    	ListNode* p;
    	while(p->next!=NULL){
    		p=p->next;
    	}
    	p->next=add;
    }
    
    void removeFirst(LinkedList l){
    	ListNode *p =l->first;
    	p=p->next;
    	delete(l->first);
    	l->first=p;
    }
    
    int findIndex(LinkedList l,int v){
    	ListNode *p=l->first;
    	int index=1;
    	while(p!=NULL){
    		if(p->data==v)return index;
    		p=p->next;
    		index++;
    	}
    }
    Phải Vui .

  2. #2
    Ngày gia nhập
    03 2009
    Nơi ở
    HƯNG YÊN
    Bài viết
    14

    typedef struct Node{
    int data;
    Node *next;
    }ListNode;
    Bạn đang khai báo struct có tên là Node mà trong struct này bạn lại dùng một biến có kiểu là Node !
    Thế giới không quan tâm đến lòng tự trọng của bạn
    Thế giới mong chờ bạn tự cảm thấy những gì mình làm là đúng đắn

  3. #3
    Ngày gia nhập
    08 2013
    Nơi ở
    Ngô Sài -Quốc Oai-Hà Tây
    Bài viết
    21

    Trích dẫn Nguyên bản được gửi bởi tuyen_dt18 Xem bài viết
    Bạn đang khai báo struct có tên là Node mà trong struct này bạn lại dùng một biến có kiểu là Node !
    Đây là để định nghĩa 1 cái nút của danh sách liên kết mà :((
    Phải Vui .

  4. #4
    Ngày gia nhập
    03 2009
    Nơi ở
    HƯNG YÊN
    Bài viết
    14

    Bạn chưa hiểu ý tôi ah !
    Ý tôi là cấu trúc còn đang khai báo mà bạn đã dùng ngay một biến thể hiện của nó trong thân STRUCT đó là không thể được
    Thế giới không quan tâm đến lòng tự trọng của bạn
    Thế giới mong chờ bạn tự cảm thấy những gì mình làm là đúng đắn

  5. #5
    Ngày gia nhập
    08 2013
    Nơi ở
    Ngô Sài -Quốc Oai-Hà Tây
    Bài viết
    21

    Trích dẫn Nguyên bản được gửi bởi tuyen_dt18 Xem bài viết
    Bạn chưa hiểu ý tôi ah !
    Ý tôi là cấu trúc còn đang khai báo mà bạn đã dùng ngay một biến thể hiện của nó trong thân STRUCT đó là không thể được
    Bạn giúp mình sửa đi , mình sửa là :

    Code:
    typedef struct Node ListNode;
    struct Node{
            int data;
            ListNode *next;
    };
    mà vẫn báo lỗi y như cũ
    Phải Vui .

  6. #6
    Ngày gia nhập
    07 2011
    Bài viết
    474

    Mặc định Cấp Phát bộ nhớ cho con trỏ kiểu tự định nghĩa

    lỗi ListNode ko có default constructor. Và trong C++ cũng ko cần typedef struct Node ListNode gì đâu. Xài thằng struct ListNode luôn.

    C++ Code:
    1. struct ListNode {
    2.     int data;
    3.     ListNode *next;
    4.     ListNode() : data(0), next(NULL) { } //default ctor
    5. };

  7. #7
    Ngày gia nhập
    08 2013
    Nơi ở
    Ngô Sài -Quốc Oai-Hà Tây
    Bài viết
    21

    Trích dẫn Nguyên bản được gửi bởi INTP Xem bài viết
    lỗi ListNode ko có default constructor. Và trong C++ cũng ko cần typedef struct Node ListNode gì đâu. Xài thằng struct ListNode luôn.

    C++ Code:
    1. struct ListNode {
    2.     int data;
    3.     ListNode *next;
    4.     ListNode() : data(0), next(NULL) { } //default ctor
    5. };
    cái typedef mình thêm để gọi cho nó gọn thôi mà , nhưng mà mình thêm cái tren rồi mà nó vẫn báo lỗi y như cũ . Như lỗi bộ nhớ ấy ,:(
    Phải Vui .

  8. #8
    Ngày gia nhập
    07 2011
    Bài viết
    474

    copy lỗi đó lên đây coi @.@ kì vậy

  9. #9
    Ngày gia nhập
    08 2013
    Nơi ở
    Ngô Sài -Quốc Oai-Hà Tây
    Bài viết
    21

    Trích dẫn Nguyên bản được gửi bởi INTP Xem bài viết
    copy lỗi đó lên đây coi @.@ kì vậy
    Đây cậu :

    Code:
    Linklist.exe has stopped working

    lỗi này lúc nào mà quên cấp phát bộ nhớ cho con trỏ là hay gặp , t thấy thế . ^^
    Phải Vui .

  10. #10
    Ngày gia nhập
    07 2011
    Bài viết
    474

    cái đó thì chắc ko phải do cấp phát động đâu mà là do deref con trỏ NULL ở đâu đó.

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

  1. Liên thông trung cấp nghề,cao đẳng nghề lên đại học chính quy 2012
    Gửi bởi cafetrungnguyen trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 31-07-2012, 02:03 PM
  2. Trả lời: 0
    Bài viết cuối: 02-08-2011, 03:26 PM
  3. Nhập ký tự đầu tiên của một nghề sẽ xuất ra nghề đó bằng việc sử dụng enum?
    Gửi bởi sasadudu trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 05-03-2011, 09:25 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