Access Violation问题!

ksws0164995 2016-05-14 03:13:23
今天做一个ODBC报表的开发,按照书上的代码敲了,但是运行的时候出现了如下问题:

之后黄色的箭头指向这里

网上查了一下说是指针区域位分配内存??可是小弟初学VC还不会调试。下面是程序段,各位大神帮忙看看,是哪个指针的问题?或者说是其他问题?
在ODBCReportView.h中定义了两个指针:
#if !defined(AFX_ODBCREPORTVIEW_H__6BC2C6CB_3629_4F87_B987_4B616DBAF745__INCLUDED_)
#define AFX_ODBCREPORTVIEW_H__6BC2C6CB_3629_4F87_B987_4B616DBAF745__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "ODBCReportSet.h"


class CODBCReportView : public CScrollView
{
protected: // create from serialization only
CODBCReportView();
DECLARE_DYNCREATE(CODBCReportView)

// Attributes
public:
CODBCReportDoc* GetDocument();
CODBCReportSet* m_pSet;

在ODBCReportView.cpp中的OnInitialUpdate()函数输入如下代码:
void CODBCReportView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
//设置大小
CSize sizeTotal(800,2000);
//设置滚动窗口大小
SetScrollSizes(MM_LOENGLISH,sizeTotal);
CODBCReportDoc* pDoc=GetDocument();
ASSERT_VALID(pDoc);
//设置标题
pDoc->SetTitle("ODBC pmtest Report");
m_pSet=&pDoc->m_dbSet;
//打开记录集
m_pSet->Open();


}
CODBCReportView类的OnDraw()函数如下,自己感觉问题像是出在这里??
void CODBCReportView::OnDraw(CDC* pDC)
{
CString line;
TEXTMETRIC metrics;
int y =0;
CFont TitleFont;
CFont HeadingFont;
CFont DetailFont;
int TabStops[]={100,275,650};


//设置记录集为开始点
m_pSet->Requery();
//标题设为粗体
TitleFont.CreateFont(44,0,0,0,FW_BOLD,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_ROMAN,"Times New Roman");
//粗体加下划线
HeadingFont.CreateFont(36,0,0,0,FW_BOLD,FALSE,TRUE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_ROMAN,"Times New Roman");
//一般字体
DetailFont.CreateFont(18,0,0,0,FW_NORMAL,FALSE,TRUE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_ROMAN,"Times New Roman");
//得到默认设置
CFont*OldFont=pDC->SelectObject(&TitleFont);
//检索标题字体测量
pDC->GetTextMetrics(&metrics);
//计算行高
int LineHeight=metrics.tmHeight+metrics.tmExternalLeading;
//设置行高为y
y-=LineHeight;
pDC->TextOut(200,0,"ODBC pmtest Report");
//设置行头字体
pDC->SelectObject(&HeadingFont);
line.Format("%s","pmtest");
//用tab输出
pDC->TabbedTextOut(0,y,line,3,TabStops,0);
if(m_pSet->IsBOF())
{
return;
}
LineHeight=metrics.tmHeight+metrics.tmExternalLeading;
y-=LineHeight;//调整y的位置
pDC->SelectObject(&DetailFont);
pDC->GetTextMetrics(&metrics);
LineHeight=metrics.tmHeight+metrics.tmExternalLeading;
while(!m_pSet->IsEOF()){
line.Format("%s\t%s",
m_pSet->m_Time,
m_pSet->m_Value);
//输出描述一行
pDC->TabbedTextOut(0,y,line,3,TabStops,0);
//得到下一行行高
y-=LineHeight;
m_pSet->MoveNext();
}
//储存默认设置
pDC->SelectObject(OldFont);
}
有以前开发过类似ODBC报表的大手,望多多指教。最好能告诉我在哪里应该添加什么语句!!
...全文
232 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ksws0164995 2016-05-15
  • 打赏
  • 举报
回复
引用 1 楼 VisualEleven 的回复:
Debug调试模式下(F5),打开call stack函数调用堆栈,先找到出错的函数调用~
能帮忙调试下么?因为我看不太懂调试内容,大部分代码都在上面了。要不然我加你QQ吧工程发给你,你帮我看看好不?
renwotao2009 2016-05-14
  • 打赏
  • 举报
回复
一般都是空指针引起的,你调试模式执行到报错位置看栈中哪个用户函数调用引起的
Eleven 2016-05-14
  • 打赏
  • 举报
回复
Debug调试模式下(F5),打开call stack函数调用堆栈,先找到出错的函数调用~

4,012

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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