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

Đề tài: lỗi: cấp phát thu hồi trong Visual C++

  1. #1
    Ngày gia nhập
    06 2007
    Bài viết
    22

    Mặc định lỗi: cấp phát thu hồi trong Visual C++

    mình tạo ra một class ,khi biên dịch trong visual 2005 khi nhấn (Ctrl +Shift +B) nó không báo lỗi gì cả

    Nhưng khi chạy chương trình thì nó báo lỗi và mình không biết cách sửa nó !

    Hi vọng bạn nào có thể giúp mình với!

    (file source đính kèm)

    Code:
    // Bai2.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include"iostream.h"
    #include"string.h"
    #include"malloc.h"
    #include"stdio.h"
    
    class CMyString
    {
    private:
     char* m_CMyString;
     int m_isize;
    public:
     CMyString(char*);
     ~CMyString();
    };
    CMyString::CMyString(char* a)
    {
     m_isize = strlen(a);
     m_CMyString =(char*)malloc(sizeof(char)*m_isize);
     strcpy(m_CMyString,a);
    }
    CMyString::~CMyString()
    {
     cout<<"Huy bo\n";
     free(m_CMyString);
     m_isize = 0;
    }
    void main()
    {
     CMyString c("nguyen van a");
    
    }
    //Mình không upload file source lên được (nó báo thất bại ) nên mọi ngưởi thông cảm cho ! ráng đau mát tí vậy

    Cảnh cáo : Source thì post trong thẻ [C O D E]. Cảm ơn. Xcross87
    Đã được chỉnh sửa lần cuối bởi Xcross87 : 19-10-2007 lúc 08:42 AM.

  2. #2
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Sorry, ko giúp được bởi vì tớ chẳng bao giờ thiết kế 1 lớp string cả, cứ tận dụng lớp string của C++ (của C++ chứ ko phải C nhé) mà phang thôi.

  3. #3
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Lỗi này hơi tinh vi, overwrite memory, cậu cấp phát không đủ memory cho m_CMyString, phải là m_isize + 1 mới đủ (thêm 1 cho NULL terminate char).

  4. #4
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    Lỗi này hơi tinh vi, overwrite memory, cậu cấp phát không đủ memory cho m_CMyString, phải là m_isize + 1 mới đủ (thêm 1 cho NULL terminate char).
    Ôi trời, hèn gì, em cũng quên mất. Test nãy giờ ko tìm được chỗ gây ra lỗi :(.

    Nhân tiện, anh cho em hỏi, tại sao lỗi overwrite memory làm màn hình console bị đứng luôn ?
    Đã được chỉnh sửa lần cuối bởi nhc1987 : 21-10-2007 lúc 01:36 PM.
    Keep moving forward!

    ... Retired ...

  5. #5
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Có trời mới biết được, heap memory của app corrupt, app có thể crash hay hang, thì console window hang luôn chớ sao !

  6. #6
    Ngày gia nhập
    06 2007
    Bài viết
    22

    Mặc định lỗi: cấp phát thu hồi trong Visual C++

    tui vừa mới có cách khác
    Code:
    m_CMyString=(char*)malloc(sizeof(char*)*m_isize);
    ke ke thân cảm ơn bà con!vì tinh thần trách nhiệm

  7. #7
    Ngày gia nhập
    09 2006
    Bài viết
    711

    Cách làm lụi, sizeof(char *) = 4, sizeof(char) = 1, cậu cấp phát quá lố rồi. m_isize không đồng nhất với size of memory allocated cho m_CMyString.
    Sửa lại thành: m_isize = strlen(a) + 1;

  8. #8
    Ngày gia nhập
    06 2007
    Bài viết
    22

    thank kùi ! hôm qua em suy nghĩ lại rùi ! đúng là cách làm của em thực sự sai !
    @TQN :cảm ơn nhiều nhiều
    @chúc mừng ngày 20/10
    Đã được chỉnh sửa lần cuối bởi suxanero : 20-10-2007 lúc 09:09 AM.

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

    Uh, mình hiều rùi ! Thanks, bài hay lém !
    Đã được chỉnh sửa lần cuối bởi TTVT : 20-10-2007 lúc 12:36 PM.

  10. #10
    Ngày gia nhập
    06 2007
    Bài viết
    22

    Tớ nghĩ "khi bạn không khai báo phuơng thức destructor nó vẫn bình thường là hoàn toàn đúng nhưng một số trường hợp nó không đủ vùng đệm do compiler cung cấp -->có thể mất 1 phần dữ liệu khi một số chưong trình khác chạy ghi đè lên phần vùng nhớ (vì nó chưa cấp phát cho bạn mà bạn chỉ dùng lậu)"
    @ bạn học trường tự nhiên luôn hả (có thể cho mình nick với có gì chat cho vui -nick mình suxanero)

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

  1. [Hỏi] Hàm performStep() của Visual C# 2005 trong Visual C# 2008
    Gửi bởi thangnhokpro trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 8
    Bài viết cuối: 29-11-2012, 07:45 AM
  2. Lỗi Visual Studio 2010 không tạo project được trong Visual C++
    Gửi bởi lekhanhduy_lkd trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 7
    Bài viết cuối: 21-02-2012, 10:39 PM
  3. Add XML vào tool box trong visual 2010 như trong Visual 2008
    Gửi bởi anhlavip_10a4 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 18-12-2011, 02:40 PM
  4. Lập trình C++ operator>> trong visual c++ <visual 2010>
    Gửi bởi lenguyenthanh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 01-07-2010, 08:48 AM
  5. Cách sử dụng Visual C# trong bộ Visual Studio 2005
    Gửi bởi svcntt trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 18-07-2009, 10:44 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