HEAP Corruption DETECTED错误,创建指针对象,删除指针的时候出现问题

[v]tianyu_edu 2008-10-07 03:54:53
出现问题代码:

CCarInfoAdd* m_pSetObj = new CCarInfoAdd();
m_pSetObj->set_DB_Info(m_dbInfo);
delete m_pSetObj;

删除指针的时候蹦出错误。

其中CCarInfoAdd类里有 CImageList m_ImageList;如果删除则没有错误蹦出,可是我需要ImageList来改变clistCtrl的行高啊,这是这么回事?
搜索一下大概说是栈被破坏掉了,可是我就加个CImageList m_ImageList这就出现问题,怎么被破坏了,我这里是个dll项目,本来是在一个exe项目里测试的好好的,代码拷贝过来却出了这个问题??
...全文
1021 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
[v]tianyu_edu 2008-10-07
  • 打赏
  • 举报
回复
所有的结果都是因为,没有拷贝到CCarInfoAdd.h到inc文件夹,因为在解决方案有多个项目,在项目里生成以后,在主项目程序里用的还是旧的CCarInfoAdd.h,两者的大小不同,才导致这样的错误,痛心啊,以后得多注意,其实都是小的地方,犯下的错误。分全给Mackz,谢谢你这么晚还在解答我的问题
[v]tianyu_edu 2008-10-07
  • 打赏
  • 举报
回复
typedef struct
{
int nDbType;
TCHAR szDBName[45];
TCHAR szHost[45];
TCHAR szUser[45];
TCHAR szPassword[45];
UINT unPort;
} DB_INFO;
这里有问题吗
菜牛 2008-10-07
  • 打赏
  • 举报
回复
重点看看这几个指针变量如何使用的。

如果set_DB_Info函数中只有new_dbInfo = m_dbInfo; 一句,那么看看这个DB_INFO是什么?类吗?其成员中是否有指针成员;其拷贝构造函数如何写的;m_dbInfo(函数参数最好和类的成员命名区分一下,我都不知道我说的是哪个m_dbInfo了)怎么来的?说清楚分析一下。
[v]tianyu_edu 2008-10-07
  • 打赏
  • 举报
回复
CCarInfoAdd m_pSetObj;
m_pSetObj.set_DB_Info(m_dbInfo);

其中void CCarInfoAdd::set_DB_Info(DB_INFO &m_dbInfo)
{
// memcpy(&new_dbInfo,&m_dbInfo,sizeof(m_dbInfo));
new_dbInfo = m_dbInfo;
return;
}



class CCarInfoAdd : public CDialog
{
DECLARE_DYNAMIC(CCarInfoAdd)

public:
CCarInfoAdd(CWnd* pParent = NULL); // 标准构造函数
virtual ~CCarInfoAdd();

// 对话框数据
enum { IDD = IDD_CARINFOADD };




protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

DECLARE_MESSAGE_MAP()

public:
virtual BOOL OnInitDialog();

private:

IVSS_Connection *m_pConn;
IVSS_ResultSet *m_ResultSet;
static DB_INFO new_dbInfo ;

public:
HICON m_hIcon;
CListCtrl m_List;
CImageList m_ImageList;//不加动态创建的这些控件一切正常,还有cedit等,加了就出问题
// CEdit* m_pEdit;

void set_DB_Info(DB_INFO &m_dbInfo);

};

菜牛 2008-10-07
  • 打赏
  • 举报
回复
我怀疑是set_DB_Info(m_dbInfo); 这里的问题,你先把无关代码注释掉,逐步缩小范围。
[v]tianyu_edu 2008-10-07
  • 打赏
  • 举报
回复
我把代码改为;
BOOL CVSS_LoginDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CCarInfoAdd m_pSetObj;
m_pSetObj.set_DB_Info(m_dbInfo);
m_cbDBType.AddString(_T("Mysql"));
m_cbDBType.SetCurSel(0);
return TRUE;
}//光标走到这里出现下面错误

Run-Time Check Failure #2 - Stack around the variable 'm_pSetObj' was corrupted.
[v]tianyu_edu 2008-10-07
  • 打赏
  • 举报
回复
谢谢你,上次都是你帮我解答的,很感激。
----------------------------------------
这些代码本来是在一个小项目里测试好的,拷贝进来就出问题了,我现在发现不光是加CImageList出问题,加别的比如CEdit,也会有同样的问题

菜牛 2008-10-07
  • 打赏
  • 举报
回复
栈被破坏,往往是因为错误的指针操作。如果你确定是这个m_ImageList问题,看你的需要显然不应该放在这个类里面,而应该放在和CListCtrl同级的窗口类里面。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧