• 8776阅读
  • 26回复

drawEllipse 是出现QGArray:: at :: absolute index 0 out of range [复制链接]

上一主题 下一主题
离线pear_2268
 

只看楼主 倒序阅读 楼主  发表于: 2010-01-11
在画圆的时候,程序挂掉,应用信息里出现QGArray:: at :: absolute index 0 out of range,不知道为什么?
离线xinqingfly

只看该作者 1楼 发表于: 2010-01-11
参数越界,有码才有真相
菜鸟也是鸟
离线pear_2268

只看该作者 2楼 发表于: 2010-01-11
cout<<"the ellipse's piont is  "<<p_Node->x<<",  "<<p_Node->y<<endl;
rhsPnt.drawEllipse(p_Node->x-2, p_Node->y-2, p_Node->x+2, p_Node->y+2);
楼上的意思是drawEllipse的里面左上角和右下角的点的值可能超出了视窗的范围?cout的值并没有超出视窗范围
离线xinqingfly

只看该作者 3楼 发表于: 2010-01-11
看看drawEllipse的帮助,参数不是对角两个点
菜鸟也是鸟
离线yangfanxing
只看该作者 4楼 发表于: 2010-01-11
嗯,对应的是左上角的点和宽高尺寸。。。细心看就好了~
PHPWind好恶心。。。不想看这种界面。。。
离线pear_2268

只看该作者 5楼 发表于: 2010-01-11
恍然大悟啊,谢谢大家!
离线pear_2268

只看该作者 6楼 发表于: 2010-01-11
vc下函数用习惯了 ,:(
离线pear_2268

只看该作者 7楼 发表于: 2010-01-11
不幸的消息,还是崩掉,
rhsPnt.drawEllipse(p_Node->x-4, p_Node->y-4, 8, 8);
离线xinqingfly

只看该作者 8楼 发表于: 2010-01-11
你的p_Node指针是有效的吗
菜鸟也是鸟
离线pear_2268

只看该作者 9楼 发表于: 2010-01-11
应该不是我参数越界的问题,因为cout输出的值有比那个点更大的
离线pear_2268

只看该作者 10楼 发表于: 2010-01-11
引用第8楼xinqingfly于2010-01-11 16:37发表的  :
你的p_Node指针是有效的吗


p_Node是有效的,上面cout能输出值,draw的时候出错
离线xinqingfly

只看该作者 11楼 发表于: 2010-01-11
确定程序是出错在这行了吗?把参数换成固定的值看看
菜鸟也是鸟
离线pear_2268

只看该作者 12楼 发表于: 2010-01-11
引用第11楼xinqingfly于2010-01-11 17:12发表的  :
确定程序是出错在这行了吗?把参数换成固定的值看看

设断点跟踪了,cout没问题,当draw的时候出错,一般出现
QGArray:: at :: absolute index 0 out of range
这样的错误,都有什么原因造成越界啊?首先肯定的是draw函数里的参数肯定是没问题的,并且还出现index 0越界
离线benbenmajia

只看该作者 13楼 发表于: 2010-01-11
什么跟什么?为什么俺不懂什么意思
安然.....
离线xinqingfly

只看该作者 14楼 发表于: 2010-01-11
rhsPnt.drawEllipse(10,10,100,100);看看 还有错就是你的rhsPnt.有问题
菜鸟也是鸟
离线yangfanxing
只看该作者 15楼 发表于: 2010-01-11
rhsPnt.drawEllipse(p_Node->x-4, p_Node->y-4, 8, 8);改成
rhsPnt.drawEllipse(p_Node->x()-4, p_Node->y()-4, 8, 8);
p_Node这个应该是QPoint*吧。
是x()不是x。。。
PHPWind好恶心。。。不想看这种界面。。。
离线pear_2268

只看该作者 16楼 发表于: 2010-01-12
[quote]引用第14楼xinqingfly于2010-01-11 17:26发表的  :
rhsPnt.drawEllipse(10,10,100,100);看看 还有错就是你的rhsPnt.有问题[/quot
这个没有问题,因为我这个画圆的是个while循环,不断取点然后进行画的,前面已经能画出大约几十个点了
离线pear_2268

只看该作者 17楼 发表于: 2010-01-12
引用第15楼yangfanxing于2010-01-11 19:37发表的  :
rhsPnt.drawEllipse(p_Node->x-4, p_Node->y-4, 8, 8);改成
rhsPnt.drawEllipse(p_Node->x()-4, p_Node->y()-4, 8, 8);
p_Node这个应该是QPoint*吧。
是x()不是x。。。

p_Node是指向自己定义的一个结构体,里面有int型的两个成员变量x和y。
离线xinqingfly

只看该作者 18楼 发表于: 2010-01-12
你把drawEllipse屏蔽掉,只输出p_Node->x,p_Node->y的值,看看是对的吗
菜鸟也是鸟
离线xinqingfly

只看该作者 19楼 发表于: 2010-01-12
最好把完整的循环贴出来,这样容易看,怀疑p_Node越界
菜鸟也是鸟
离线yangfanxing
只看该作者 20楼 发表于: 2010-01-12
引用第16楼pear_2268于2010-01-12 09:44发表的  :
[quote]引用第14楼xinqingfly于2010-01-11 17:26发表的  :
rhsPnt.drawEllipse(10,10,100,100);看看 还有错就是你的rhsPnt.有问题[/quot
这个没有问题,因为我这个画圆的是个while循环,不断取点然后进行画的,前面已经能画出大约几十个点了


while循环?画圆???那注释掉循环是OK的吗?while写错没?
你就多贴点儿吧~~~别太吝啬了哈~~~呵呵。。。
PHPWind好恶心。。。不想看这种界面。。。
离线pear_2268

只看该作者 21楼 发表于: 2010-01-12
while (pDataSet)
{
         R_NODE *pNode = pDataSet->m_pRNode;
         while (pNode)
         {
    NODE *p_Node = (_NODE*)*pNode;
    if(p_Node->Show)
    {    
               cout<<"the ellipse's piont is  "<<p_Node->x<<",  "<<p_Node->y<<endl;
               rhsPnt.drawEllipse(p_Node->x-4, p_Node->y-4, 8, 8);
    }                                pNode = pNode->Next;
         }
     pDataSet = pDataSet->m_pNext;
}
离线pear_2268

只看该作者 22楼 发表于: 2010-01-12
刚才对出现问题的点进行了测试,
rhsPnt.drawEllipse(299, 440, 8, 8);    
可以画出来
多画几个圆也ok
rhsPnt.drawEllipse(100, 100, 10, 10);    
离线xinqingfly

只看该作者 23楼 发表于: 2010-01-12
检查你转换出来的p_Node的有效性,NODE *p_Node = (_NODE*)*pNode;
为啥不是NODE *p_Node = (_NODE*)pNode;
pNode本身就是**?
菜鸟也是鸟
离线pear_2268

只看该作者 24楼 发表于: 2010-01-12
引用第23楼xinqingfly于2010-01-12 10:25发表的  :
检查你转换出来的p_Node的有效性,NODE *p_Node = (_NODE*)*pNode;
为啥不是NODE *p_Node = (_NODE*)pNode;
pNode本身就是**?

如果pNode本身无效的话,cout的时候就应该出错啊?pNode本身就是一个**,因为
R_NODE*    m_pRNode;
R_NODE *pNode = pDataSet->m_pRNode;
_NODE *p_Node = (_NODE*)*pNode;
程序很复杂的,是从vc下移植过来的,进行修改,所以运行过程中可能会出现预想不到的问题
离线xinqingfly

只看该作者 25楼 发表于: 2010-01-12
看不出来你的pNode是**,另外越界访问的内存没有被别的使用的话不一定会立刻报错的
菜鸟也是鸟
离线pear_2268

只看该作者 26楼 发表于: 2010-01-12
那怎么判断p_Node 是不是有效啊?
快速回复
限100 字节
 
上一个 下一个