我刚学习VC不久,写了一个绘制直线,圆和Bezier曲线的程序,编译都通过没有问题,但在画Bezier曲线时,取点超过8点就会弹出“"0x5f481247"指令引用的"0x00000004"内存。该内存不能为"read"。”的消息框。进入调试后,显示“m_hDC CXX0030: 错误: 无法计算表达式的值”,“m_hAttribDC CXX0030: 错误: 无法计算表达式的值” 和 “m_bPrinting CXX0030: 错误: 无法计算表达式的值” 3个错误,这到底是什么原因啊?请各位大侠帮忙解答一下。
我的Bezier曲线源程序如下:
void CMyView::Bezier(DPOINT* p) //画Bezier曲线
{
CDC* pDC=GetDC();
if (n<=0)
return;
if((p[n].x<p[0].x+1) && (p[n].x>p[0].x-1) && (p[n].y<p[0].y+1) && (p[n].y>p[0].y-1))
{
pDC->SetPixel(ROUND(p[0].x),ROUND(p[0].y), RGB(255,0,0)); //设置曲线颜色
return;
}
DPOINT *p1;
p1 = new DPOINT[n+1];
int i,j;
p1[0]=p[0];
for(i=1;i<=n;i++)
{
for(j=0;j<=n-i;j++)
{
p[j].x=(p[j].x+p[j+1].x)/2;
p[j].y=(p[j].y+p[j+1].y)/2;
}
p1[i]=p[0];
}
Bezier(p);
Bezier(p1);
delete p1;
}
------最佳解决方案--------------------------------------------------------
严重错误 CDC* pDC=GetDC(); 需要release
你这是递归调用,
Bezier(p);
Bezier(p1);
dc资源是有限的
------其他解决方案--------------------------------------------------------
我加上了ReleaseDC(pDC)后,还是会出现以上三个问题啊,麻烦知道原因的大侠帮帮忙解答一下。
------其他解决方案--------------------------------------------------------
我也遇到类似的情况(再添加了opencv1.0之后):
IplImage* image = cvLoadImage("G:\\tupian\\A.bmp"); //就是这一句
// demo2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
int main()
{
IplImage* image = cvLoadImage("G:\\tupian\\A.bmp");
//IplImage* image = cvLoadImage("C:\\Users\\liuchang\\test1.bmp");
if(!image){ // 如果加载失败
printf("error: 导入图片出错,很可能是路径出错 !\n");
return 0;
}
cvNamedWindow("win1",CV_WINDOW_AUTOSIZE); // 创建一个窗口
cvMoveWindow("win1",100,100); // 定位一个窗口
printf("图片");
cvShowImage("win1",image); // 在创建的窗口中显示一个图片
// cvWaitKey(0); // 等待用户输入,否则一闪而过 , 看不到图片