栈error,急,求助!!

zhanguo77 2011-11-25 02:47:19
我用visual studio MFC做了一个程序,有点击按钮,弹出【打开文件】对话框和【保存文件】对话框的功能的按钮,
有时候点击按钮的时候就出现栈error。请问是什么原因,怎么解决?
我是新手,请解说的详细点啊,拜托了。
图片是弹出error的对话框。

还有按钮函数的代码。

void FMLogicName::OpenLogicNameFile()
{
CString strFileName;
CStdioFile file;
CFileDialog savedlg(true,
_T("csv"),
_T(""),
OFN_OVERWRITEPROMPT|OFN_CREATEPROMPT,
_T("CSV Files (*.csv)|*.csv")
,NULL);

if (savedlg.DoModal() == IDOK)
{
strFileName = savedlg.GetPathName();
if (!file.Open (strFileName,CFile::modeReadWrite | CFile::typeText))
{
MessageBox(_T("文件被打开"),"FM Radio",MB_ICONWARNING);
return;
}
else
{
CString szFilePath = _T("FM Radio,,");
CString strline;
file.ReadString(strline);
if(strline != szFilePath)
{MessageBox(_T("不是FM Radio文件"),"FM Radio",MB_ICONWARNING);return;}

file.ReadString(strline);
file.ReadString(strline);
file.ReadString(strline);
file.ReadString(strline);

while(file.ReadString(strline))
{
int nIndex = m_listctrl1.GetItemCount();

int comma[2];
int k=0;
for(int i=0; i<strline.GetLength(); i++)
{
if(strline[i]==','){comma[k]=i;k++;}
}

CString str1,str2,cnum,RowNo;
if(nIndex<9)RowNo.Format("00%d",nIndex+1);
else if(nIndex<99)RowNo.Format("0%d",nIndex+1);
else RowNo.Format("%d",nIndex+1);
LPSTR pnum = (LPSTR)(LPCSTR)RowNo;
for(int i=comma[0]+1; i<comma[1]; i++)str1+=strline[i];

LPSTR pstr1 = (LPSTR)(LPCSTR)str1;
for(int i=comma[1]+1; i<strline.GetLength(); i++)str2+=strline[i];
LPSTR pstr2 = (LPSTR)(LPCSTR)str2;

LV_ITEM lvitemAdd = {0};
lvitemAdd.mask = LVIF_TEXT;
lvitemAdd.iItem = nIndex ;
lvitemAdd.iSubItem = 0;
lvitemAdd.pszText = pnum;

if (m_listctrl1.InsertItem(&lvitemAdd) != -1)
{
LV_ITEM lvitem1 = {0};
lvitem1.mask = LVIF_TEXT;
lvitem1.iItem = nIndex ;
lvitem1.iSubItem = 1;
lvitem1.pszText = pstr1;

LV_ITEM lvitem2 = {0};
lvitem2.mask = LVIF_TEXT;
lvitem2.iItem = nIndex ;
lvitem2.iSubItem = 2;
lvitem2.pszText = pstr2;

m_listctrl1.SetItem(&lvitem1);
m_listctrl1.SetItem(&lvitem2);
}
}
}
file.Close();
}
}


Dubug时候,自动中断的中断点。在dbgheap.c文件里,不是我的自己写的文件。

if (!CheckBytes(pbData(pHead) + pHead->nDataSize, _bNoMansLandFill, nNoMansLandSize))
{
if (pHead->szFileName)
{
_RPT5(_CRT_ERROR, "HEAP CORRUPTION DETECTED: after %hs block (#%d) at 0x%p.\n"
"CRT detected that the application wrote to memory after end of heap buffer.\n"
_ALLOCATION_FILE_LINENUM,
szBlockUseName[_BLOCK_TYPE(pHead->nBlockUse)],
pHead->lRequest,
(BYTE *) pbData(pHead),
pHead->szFileName,
pHead->nLine);//debug的中断点在这行
}
else
{
_RPT3(_CRT_ERROR, "HEAP CORRUPTION DETECTED: after %hs block (#%d) at 0x%p.\n"
"CRT detected that the application wrote to memory after end of heap buffer.\n",
szBlockUseName[_BLOCK_TYPE(pHead->nBlockUse)],
pHead->lRequest,
(BYTE *) pbData(pHead));
}
}
...全文
121 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wasedasai 2011-12-08
  • 打赏
  • 举报
回复
CFileDialog savedlg(true,
_T("csv"),
_T(""),//改成NULL
OFN_OVERWRITEPROMPT|OFN_CREATEPROMPT,
_T("CSV Files (*.csv)|*.csv")//改成 _T("CSV Files (*.csv)|*.csv||")
,NULL);
可能是这样
quwei197874 2011-11-28
  • 打赏
  • 举报
回复
看堆栈调试啊
zhanguo77 2011-11-28
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 smwhotjay 的回复:]

heap err 不是栈!是堆.
调试是一门学科.要把技能提高. 你那代码可以debug单步调.很快的.直到哪一步出错.那就是那句.
[/Quote]

我没用到堆啊。
smwhotjay 2011-11-25
  • 打赏
  • 举报
回复
heap err 不是栈!是堆.
调试是一门学科.要把技能提高. 你那代码可以debug单步调.很快的.直到哪一步出错.那就是那句.
dahaiI0 2011-11-25
  • 打赏
  • 举报
回复
多试几次呗,崩了点中间那个按钮,再看调用堆栈,看是运行到哪个函数崩了。
zhanguo77 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 oyljerry 的回复:]

引用 7 楼 zhanguo77 的回复:
引用 6 楼 yuucyf 的回复:

你把打开功能和保存功能部分代码注释掉,然后慢慢Debug,应该是可以找到原因的.
你的代码又不长.


不是总出现error
偶尔才出现一次。
怎么Debug?我不会用visual studio,新手,请详细指示一下。

在你的函数中设置断点,然后Start with Debugging运行……
[/Quote]

这个error偶尔才出现,怎么办?
oyljerry 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhanguo77 的回复:]
引用 6 楼 yuucyf 的回复:

你把打开功能和保存功能部分代码注释掉,然后慢慢Debug,应该是可以找到原因的.
你的代码又不长.


不是总出现error
偶尔才出现一次。
怎么Debug?我不会用visual studio,新手,请详细指示一下。
[/Quote]
在你的函数中设置断点,然后Start with Debugging运行你的程序,然后一步步调试
yuucyf 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yuucyf 的回复:]
Heap Corruption Detected
请参考这篇文章,知道什么原因导致再查找问题.
http://blog.csdn.net/yuucyf/article/details/6303915
[/Quote]
看一下这篇文章你就知道原理,然后你再针对性地慢慢Debug.
zhanguo77 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yuucyf 的回复:]

你把打开功能和保存功能部分代码注释掉,然后慢慢Debug,应该是可以找到原因的.
你的代码又不长.
[/Quote]

不是总出现error
偶尔才出现一次。
怎么Debug?我不会用visual studio,新手,请详细指示一下。
yuucyf 2011-11-25
  • 打赏
  • 举报
回复
你把打开功能和保存功能部分代码注释掉,然后慢慢Debug,应该是可以找到原因的.
你的代码又不长.
zhanguo77 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hezhe1008 的回复:]

打开文件的时候有个返回值,判断一下是否正确,错误return
[/Quote]

一点击按钮,马上出现错误,应该是这里发生的error吧。
因为这个打开文件的对话框,还没弹出来就error了。

CString strFileName;
CStdioFile file;
CFileDialog savedlg(true,
_T("csv"),
_T(""),
OFN_OVERWRITEPROMPT|OFN_CREATEPROMPT,
_T("CSV Files (*.csv)|*.csv")
,NULL);
yuucyf 2011-11-25
  • 打赏
  • 举报
回复
Heap Corruption Detected
请参考这篇文章,知道什么原因导致再查找问题.
http://blog.csdn.net/yuucyf/article/details/6303915
呔妖怪来嘛 2011-11-25
  • 打赏
  • 举报
回复
打开文件的时候有个返回值,判断一下是否正确,错误return
zhanguo77 2011-11-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hezhe1008 的回复:]

路径为空的时候没有判断吧
[/Quote]
什么意思,能说的具体点吗
呔妖怪来嘛 2011-11-25
  • 打赏
  • 举报
回复
路径为空的时候没有判断吧

16,472

社区成员

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

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

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