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ố 11 kết quả

Đề tài: Lỗi tràn bộ đệm ngăn xếp này là do đâu ?

  1. #1
    Ngày gia nhập
    02 2009
    Bài viết
    38

    Mặc định Lỗi tràn bộ đệm ngăn xếp này là do đâu ?

    Chào các bạn, mình mới tìm hiểu về C#, đang làm 1 bài tập.

    Đây là đoạn code mình đang viết dở :
    class Crocodile
    Code:
    class Crocodile : ITerrestrialAnimal, IMarineAnimal
        {        
            public override string ToString()
            {
                Console.WriteLine(ID);
                Console.WriteLine(Name);
                Console.WriteLine(Age);
                Console.WriteLine("Crodile");
                return null;
            }
    
            public void Move()
            {
                Console.WriteLine("Run and Swim");
            }
    
    
            public int ID
            {
                get
                {
                    return this.ID;
                }
                set
                {
                    this.ID = value;
                }
            }
    
            public string Name
            {
                get
                {
                    return this.Name;
                }
                set
                {
                    this.Name = value;
                }
            }
    
            public int Age
            {
                get
                {
                    return this.Age;
                }
                set
                {
                    this.Age = value;
                }
            }
           
          
        }
    interface ITerrestrialAnimal và IMarineAnimal
    Code:
     interface ITerrestrialAnimal : IAnimal
        {
             void Move();
        }
     interface IMarineAnimal : IAnimal
        {
             void Move();
            
        }
    interface IAnimal
    Code:
     interface IAnimal
        {
            int ID
            {
                get;
                set;
            }
    
    
            string Name
            {
                get;
                set;
            }
    
    
            int Age
            {
                get;
                set;
            }
            
        }
    Và đoạn chương trình thực thi :

    Code:
      case 1:
                                Crocodile cr = new Crocodile();
                                Console.WriteLine("Please enter name of Crocodile");
                                cr.Name = Console.ReadLine();
                                Console.WriteLine("Please enter Age of Crocodile");
                                cr.Age = Convert.ToInt32(Console.ReadLine());
                                cr.ID = pr.id;
                                ht.Add(cr.ID, cr);
                                break;
    Khi nhập tên con cá sấu thì nó báo là : "Process terminated due to StackOverflowExeption" Mình không hiểu lỗi ở đâu ? Bạn nào biết làm ơn chỉ giùm mình với mình xin cảm ơn rất nhiều.
    Biết thì nói không biết thì rửa tai lắng nghe.

  2. #2
    Ngày gia nhập
    09 2008
    Nơi ở
    Ở nhà chứ đâu... nhìn cái gì?!?!
    Bài viết
    218

    Tại class Crocodile:
    + thêm 3 biến toàn cục mID, mAge và mName.
    + Tạo một constructor public Crocodile() { mID = -1; mAge = -1; mName = "";}
    + tại Properties ID get { return mID; } và set mID = value; nếu bạn để this.ID thì nó cứ loop để tìm một giá trị không có thực thì overflow thôi. Làm tương tự cho mAge và mName...

    + hàm ToString() bạn nên bỏ cái return null đi. Nên thay thế: return "a crocodile name: " + mName;

    + Nên bỏ abstract method Move() lên trên IAnimal luôn.

    ht.Add(cr.ID, cr); ht là HashTable đúng ko bạn, bạn có khởi tạo new cho nó chưa?

    Mình có làm một demo tuơng tự và chạy tốt, bạn thử xem.
    Quá nản cái viễn cảnh hiện tại. Nhiều "thanh niên" sống "ảo" quá. Thời nào rồi mà còn hỏi WinForms + ADO.NET

  3. #3
    Ngày gia nhập
    02 2009
    Bài viết
    38

    Ồ cảm ơn bạn rất nhiều nhưng đề bài nó bắt mình làm thế chứ mình có muốn làm như thế đâu. Liệu có cách giải quyết nào khác không nhỉ ?

    ht.Add(cr.ID, cr); ht là HashTable đúng ko bạn, bạn có khởi tạo new cho nó chưa?
    Đúng rồi bạn ạ, mình new nó ngay từ đầu rồi.

    tại Properties ID get { return mID; } và set mID = value; nếu bạn để this.ID thì nó cứ loop để tìm một giá trị không có thực thì overflow thôi. Làm tương tự cho mAge và mName...
    Mình chưa hiểu lắm về property và field liệu bạn có thể giải thích cho mình được không nhỉ ? Tại sao lại cần phải khai báo property thay vì field nhỉ ?
    Đã được chỉnh sửa lần cuối bởi ttecak : 02-03-2009 lúc 01:30 PM.
    Biết thì nói không biết thì rửa tai lắng nghe.

  4. #4
    Ngày gia nhập
    09 2008
    Nơi ở
    Ở nhà chứ đâu... nhìn cái gì?!?!
    Bài viết
    218

    Bạn có thể đưa đề cho mình xem đc không? Xem có cách giải quyết nào khác không ...
    Quá nản cái viễn cảnh hiện tại. Nhiều "thanh niên" sống "ảo" quá. Thời nào rồi mà còn hỏi WinForms + ADO.NET

  5. #5
    Ngày gia nhập
    02 2009
    Bài viết
    38

    Ok cảm ơn bạn rất nhiều đây là đề của mình : http://www.mediafire.com/download.php?azmznmjmeoy
    Biết thì nói không biết thì rửa tai lắng nghe.

  6. #6
    Ngày gia nhập
    09 2008
    Nơi ở
    Ở nhà chứ đâu... nhìn cái gì?!?!
    Bài viết
    218

    Mặc định Lỗi tràn bộ đệm ngăn xếp này là do đâu ?

    OK, mình đang xem cho mình 100 phút theo đề nhé (trong lúc chờ bà QC khó tính phản hồi).Bạn có thể làm bài theo hướng của mình post ở trên coi chạy đc không nhé
    Đã được chỉnh sửa lần cuối bởi OWickedFox : 02-03-2009 lúc 01:58 PM.
    Quá nản cái viễn cảnh hiện tại. Nhiều "thanh niên" sống "ảo" quá. Thời nào rồi mà còn hỏi WinForms + ADO.NET

  7. #7
    Ngày gia nhập
    02 2009
    Bài viết
    38

    À cái bạn chỉ mình thì chạy được rồi. Nhưng mình vẫn đang vướng việc tạo thêm field trong Crocodile cơ Mình chỉ kế thừa lại property thì tại sao field mình khai báo trùng tên với property thì lại không được nhỉ >"< Rõ ràng là property chỉ có tác dụng chặn giá trị không hợp lệ vào field. Vậy thì lý do gì khiến nó không cho phép mình sử dụng field trùng tên ?
    Biết thì nói không biết thì rửa tai lắng nghe.

  8. #8
    Ngày gia nhập
    09 2008
    Nơi ở
    Ở nhà chứ đâu... nhìn cái gì?!?!
    Bài viết
    218

    Property thì không thể trùng trên theo kiểu overload của method được. Đạt khác tên thì dễ kiểm soát hơn chứ.
    Quá nản cái viễn cảnh hiện tại. Nhiều "thanh niên" sống "ảo" quá. Thời nào rồi mà còn hỏi WinForms + ADO.NET

  9. #9
    Ngày gia nhập
    04 2007
    Bài viết
    134

    Trích dẫn Nguyên bản được gửi bởi ttecak Xem bài viết
    À cái bạn chỉ mình thì chạy được rồi. Nhưng mình vẫn đang vướng việc tạo thêm field trong Crocodile cơ Mình chỉ kế thừa lại property thì tại sao field mình khai báo trùng tên với property thì lại không được nhỉ >"< Rõ ràng là property chỉ có tác dụng chặn giá trị không hợp lệ vào field. Vậy thì lý do gì khiến nó không cho phép mình sử dụng field trùng tên ?
    Ko trùng dc, nếu trùng thì bạn ghi this.ID nó biết lấy field hay property
    PS, property cũng ko phải dc dùng để chặn chiếc gì đó đâu nhé
    Đã được chỉnh sửa lần cuối bởi Lugia : 02-03-2009 lúc 02:30 PM.

  10. #10
    Ngày gia nhập
    02 2009
    Bài viết
    38

    Hmm thế tại sao mình đọc ở 1 cuốn sách nó lại ghi thế này :
    19. Sự khác nhau giữa Property và Field?
    - Property dùng để quản lý sự truy cập đến Field. Dùng Property để đảm bảo Field không bị gán các giá trị không hợp lệ.
    Biết thì nói không biết thì rửa tai lắng nghe.

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

  1. Bán tấm compact | Phụ kiện vách ngăn vệ sinh | Thi công vách ngăn hoàn thiện
    Gửi bởi marketeronline trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 2
    Bài viết cuối: 06-10-2014, 01:02 PM
  2. bán tấm compact và thi công vách ngăn vệ sinh, vách ngăn văn phòng, vách ngăn di động, sàn nâng kỹ thuật
    Gửi bởi marketeronline 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: 24-09-2013, 01:14 AM
  3. vách ngăn vệ sinh, thiết kế thi công vách ngăn vệ sinh
    Gửi bởi hoak52 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: 16-11-2012, 09:31 AM
  4. vách ngăn văn phòng, vách ngăn bọc nỉ, vách văn phòng dày 32mm, 42mm
    Gửi bởi marketeronline trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 7
    Bài viết cuối: 01-10-2012, 02:28 PM
  5. Cấu trúc ngăn xếp và các thao tác trên ngăn xếp?
    Gửi bởi master_cheat001 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 02-11-2010, 11:43 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