Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 8 của 8
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bạn dùng Compiler nảo vậy?

  3. #3
    mình dùng dev-c++ bạn

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Tham số truyền cho delete[] là một con trỏ được cấp phát trước đó bằng new operator, vì thế bạn không thể tùy tiện làm như trên được. Heap và stack khác hẳn nhau, 60 characters của mảng ten[] được đưa lên stack memory; cơ chế làm việc của delete[] là delete con trỏ được new trên heap memory (nếu con trỏ trỏ đến null thì delete[] operator không làm gì cả), vậy việc delete không đúng tham số, không đúng memory area là không thể xảy ra. Trình dịch của bạn không phát hiện ra điều này, nhưng chương trình của bạn bị corrupt nghiêm trọng. Hơn thế, chương trình chạy được không có nghĩa là chương trình đúng, run perfectly.

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Vậy trong class chúng ta nên dùng cấp phát động ư

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    bỏ cái dòng delete [] đó đi


    Mã:
    class A{public:  A() { *hoten = '\0'; }  ~A() {}private:  char hoten[60];};   class B{public:  B() : hoten(new char[60]) { *hoten = '\0'; }  ~B() { delete [] hoten; }private:  char* hoten;};   #include <string> class C{public:  C() {}  ~C() {}private:  std::string hoten;};

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình nhớ là khi yêu cầu cấp phát mảng tĩnh (cấp phát trên stack) thì khi ra khỏi scope khai báo thì đối tượng mảng tĩnh đó tự động giải phóng, nên trong hàm hủy bạn không cần dùng toán tử delete đâu.

  8. #8
    Mình chỉ dùng thử không ngờ lại được [IMG]images/smilies/17.gif[/IMG]

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •