CArray的m_nSize nIndex需要人为设置吗?

hipposoft 2007-08-01 03:54:27
从一个文本文件LCP.txt中读取点的坐标值,然后存入到一个数组中。文件内容如下:
242 91
192 63
140 80
79 48
左列为横坐标X,右列为纵坐标Y
数组定义为
CArray<CPoint,CPoint> m_L_ControlPoints; //控制点坐标
当然也包含了#include <afxtempl.h>
下面写一个读文件的方法:

void CDlt::ReadData()
{
CFileDialog fileOpenDlg(true,"txt","*.txt",NULL,"Left Image Points(*.txt)",NULL);
int nRespond = fileOpenDlg.DoModal();
if ( nRespond != IDOK )
return;
FILE* pFile = fopen( fileOpenDlg.GetPathName(),"r+" );

while (!feof( pFile ) )
{
CPoint pt1;
fscanf( pFile,"%d %d",&pt1.x,&pt1.y);
m_L_ControlPoints.Add(pt1);
}
fclose( pFile );
}
程序运行后总是出错。在
fscanf( pFile,"%d %d",&pt1.x,&pt1.y);
m_L_ControlPoints.Add(pt1);
这两行插入断点,跟踪发现:
NewElement也有,新的点pt1的x,y分别取道了文件中第一行值。
但是提示:nIndex和m_nSize地方跟踪。

各位高手,指点一下,问题出在哪里??







...全文
331 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
pomelowu 2007-08-01
  • 打赏
  • 举报
回复

指针和对象。。。
hipposoft 2007-08-01
  • 打赏
  • 举报
回复
衷心感谢二位。
jasonshark(没暑假了...)
oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)

是这个问题。
我测试了,数据都读进来了。
看来我的基本功还是不扎实。
jasonshark 2007-08-01
  • 打赏
  • 举报
回复
呵呵,肯定有问题啊.
应该在视图里
CDlt m_Dlt;
构造函数里就不管了

不过我很好奇为什么那个偏移是8而不是4....
oyljerry 2007-08-01
  • 打赏
  • 举报
回复
p_Dlt = new CDlt();
oyljerry 2007-08-01
  • 打赏
  • 举报
回复
是否正确分配空间
hipposoft 2007-08-01
  • 打赏
  • 举报
回复
CDlt定义了.
在视图中View里,
定义了一个CDlt* p_Dlt;
在View的构造函数中
p_Dlt=NULL;
这有错吗?大哥

帮我想想.多谢了.
jasonshark 2007-08-01
  • 打赏
  • 举报
回复
就快要找到错了....别放弃啊...
是你的CDlt没有分配空间,或直接CDlt * pDlt = NULL了,是不是?
hipposoft 2007-08-01
  • 打赏
  • 举报
回复
多谢楼上的。
我单独写了个工程测试这个,没问题。
放到我的项目中,用CDlt类封装了。有问题。
今天真是黑暗
莫名奇妙的错误
jasonshark 2007-08-01
  • 打赏
  • 举报
回复
你在ReadData入口点断下,看看this是不是NULL....
hipposoft 2007-08-01
  • 打赏
  • 举报
回复
class CDlt
{
public:
CDlt();
virtual ~CDlt();

public:
void ReadData();
CArray<CPoint,CPoint> m_L_ControlPoints; //左相控制点像方坐标
CArray<CPoint,CPoint> m_R_ControlPoints; //右相控制点像方坐标
jasonshark 2007-08-01
  • 打赏
  • 举报
回复
+this 0x00000008... 这个怎么回事?
你的m_L_ControlPoints是在哪里分配的?
hipposoft 2007-08-01
  • 打赏
  • 举报
回复
template<class TYPE, class ARG_TYPE>
AFX_INLINE int CArray<TYPE, ARG_TYPE>::Add(ARG_TYPE newElement)
{ int nIndex = m_nSize;
SetAtGrow(nIndex, newElement);
return nIndex; }
我专门查了的.
我在fscanf( pFile,"%d %d",&pt1.x,&pt1.y);
m_L_ControlPoints.Add(pt1);
设置断点
然后跟踪
跟踪的结果如下:
定位到Add方法上
Name Value
newElement {x=242 y=91}
nIndex -858993460
+this 0x00000008{CArray<CPoint,CPoint>}红色显示
下面显示
m_pData
m_nSize
都是提示 error:expression cannot be valued.

Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\winmm.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\user32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\gdi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\advapi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\rpcrt4.dll', no matching symbolic information found.
Loaded symbols for 'C:\WINDOWS\system32\MFC42D.DLL'
Loaded symbols for 'C:\WINDOWS\system32\MSVCRTD.DLL'
Loaded symbols for 'C:\WINDOWS\system32\MFCO42D.DLL'
Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.Windows.GdiPlus_6595b64144ccf1df_1.0.10.0_x-ww_712befd8\GdiPlus.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ole32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msvcrt.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\imm32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\lpk.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\usp10.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\mfc42loc.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\uxtheme.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\MSCTF.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\version.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\MSCTFIME.IME', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\comctl32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\MSIMTF.dll', no matching symbolic information found.
Warning: no message line prompt for ID 0x803C.
Loaded 'C:\WINDOWS\system32\comdlg32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\shlwapi.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\shell32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.10.0_x-ww_f7fb5805\comctl32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\apphelp.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\clbcatq.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\oleaut32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\comres.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\version.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\cscui.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\cscdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\browseui.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\setupapi.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\userenv.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ntshrui.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\atl.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\netapi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\shdocvw.dll', no matching symbolic information found.
First-chance exception in GIMS.exe: 0xC0000005: Access Violation.



xdljf 2007-08-01
  • 打赏
  • 举报
回复
偶运行了一下,没有任何问题哦
pomelowu 2007-08-01
  • 打赏
  • 举报
回复
一般是不用手动控制的了。

是第一次插入就会出错么?CDlt构造的时候RemoveAll试试看
jasonshark 2007-08-01
  • 打赏
  • 举报
回复
既然你是用Add就不需要手动设
看样子不该有问题的啊...

具体出错的位置知道不?

16,551

社区成员

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

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

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