指针问题求教

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针问题求教相关的知识,希望对你有一定的参考价值。

void CdemoView::OnDraw(CDC* pDC)

CdemoDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// CSize sizeTotal;
// TODO: calculate the total size of this view
// sizeTotal.cx =800; sizeTotal.cy =GetDocument()->m_array.GetSize();
//SetScrollSizes(MM_TEXT, sizeTotal);

CString str,strdr;
CPoint point(0,0);

int nCount=pDoc->m_data->m_stock.GetSize();
CMap<DWORD,DWORD,drdata,drdata&>* pMapTemp=new CMap<DWORD,DWORD,drdata,drdata&>;

for(int i=0;i<nCount;i++)

str.Format(TEXT("%s"),pDoc->m_data->m_stock.GetAt(i).code);
pDC->TextOut(20,point.y*20,str);

if(0!=pDoc->m_drmap->Lookup(str,(void*&)pMapTemp))

int x=0;

POSITION pos=pMapTemp->GetStartPosition();
while(pos!=0)

DWORD key;
drdata value;

pMapTemp->GetNextAssoc(pos,key,value);
CString str;
str.Format(TEXT("%d"),key);

pDC->TextOut(20+(x+1)*100,point.y*20,str);
x++;


point.y++;



ReleaseDC(pDC);
//delete pMapTemp;加上delete pMapTemp;重绘的时候就会报错,顺便推荐本这方面的书吧,近日老有这种问题

// TODO: add draw code for native data here

pDoc->m_drmap->Lookup(str,(void*&)pMapTemp))这里错了。

MSDN上CMap::Lookup的定义是:
BOOL Lookup(
ARG_KEY key,
VALUE& rValue
) const;
意思是,将按key查找到的值,赋值给rValue。

这样,pMapTemp的值就被修改掉了。注意此时,pMapTemp将不再指向刚刚new出来的那块地址了(这个new出来的内存泄露了)。
而当你在下面delete pMapTemp的时候,delete的其实是pDoc->m_drmap负责管理的内存。

改正方法很简单,只要将
CMap<DWORD,DWORD,drdata,drdata&>* pMapTemp=new CMap<DWORD,DWORD,drdata,drdata&>;

改成
CMap<DWORD,DWORD,drdata,drdata&>* pMapTemp;

即可。
delete pMapTemp;也是不需要的。
参考技术A 叉一句:
这VC++ 学的是累。我学C++BUILDER,简单方便多了。追问

VB更简单

追答

VB简单,但目标程序太差了。C++BUILDER 可不是VB

参考技术B ReleaseDC(pDC)是不需要的,而 delete pMapTemp 看上去没错追问

首次运行没问题,重绘就报错

追答

在你的代码中有这样一句:
if(0!=pDoc->m_drmap->Lookup(str,(void*&)pMapTemp))

将pMapTemp的指针变量的引用传入 Lookup,那有没有在 Lookup函数中改变指针?

求教html高手怎么弄背景图片不重复不平铺 只显示一张图片

<style>

body

background:url(http_imgloadCAR8STN6.jpg) no-repeat;

</style>

把这个放在head区域  或者写在单独的css样式表文件里。

万维网上的一个超媒体文档称之为一个页面(外语:page)。作为一个组织或者个人在万维网上放置开始点的页面称为主页(外语:Homepage)或首页,主页中通常包括有指向其他相关页面或其他节点的指针(超级链接),所谓超级链接,就是一种统一资源定位器(Uniform Resource Locator,外语缩写:URL)指针,通过激活(点击)它,可使浏览器方便地获取新的网页。这也是HTML获得广泛应用的最重要的原因之一。在逻辑上将视为一个整体的一系列页面的有机集合称为网站(Website或Site)。超级文本标记语言(英文缩写:HTML)是为“网页创建和其它可在网页浏览器中看到的信息”设计的一种标记语言。

网页的本质就是超级文本标记语言,通过结合使用其他的Web技术(如:脚本语言、公共网关接口、组件等),可以创造出功能强大的网页。因而,超级文本标记语言是万维网(Web)编程的基础,也就是说万维网是建立在超文本基础之上的。超级文本标记语言之所以称为超文本标记语言,是因为文本中包含了所谓“超级链接”点。

参考技术A 背景图片不重复不平铺,可以这样设定背景:
1、<body style="background-image: url("图片文件地址"); background-attachment: fixed;">
这样背景图片就会固定住,不会因页面滚动而重复。
2、使图在任何大小的屏幕都不会显示重复,可以这样设定背景(图像不平铺):
<body style="background-image: url("图片文件地址"); background-repeat:no-repeat;">

两者结合,就是:<body style="background-image: url("图片文件地址"); background-repeat:no-repeat; background-attachment: fixed;">本回答被提问者采纳
参考技术B background:url(11.jpg) no-repeat; no-repeat就是不重复不平铺的意思 参考技术C <div style="background:url(20100918068.jpg) no-repeat; width:100px; height:100px;"></div>

以上是关于指针问题求教的主要内容,如果未能解决你的问题,请参考以下文章

关于C++模版的一个问题求教,如果取模板类内的一个结构体的指针。

fstream指针

c语言中关于结构体 调用函数的问题 新手求教

新手求教readdir_r函数是啥意思?

delphi 分割字符串求教

求教html高手怎么弄背景图片不重复不平铺 只显示一张图片