dipenghao 发表于 2004-6-30 09:59:00

如何在arx中动态分配二维数组????

我自己定义了一个坐标结构 比如 class point(double x,double y};


point point_array;


但是系统一运行就出错,在vc里单独运行则没有问题,或者改成


point_array就没有问题,可能是刚开始分配内存过大引起的。


请问如果动态分配的话,如何实现 ???

boaosun 发表于 2004-7-2 10:26:00

point_array=new point *;


for (int i=0;i<100;i++) point _array=new point;

dipenghao 发表于 2004-7-2 18:02:00

谢谢,能否说的具体些?


如果我不知道具体的数值(100),则如何构造。


能否实现CArray中用append()或add()函数添加元素?

boaosun 发表于 2004-7-2 21:38:00

用AcGePoint3dArray


AcGeDoubleArray


AcDbObjectArray


dipenghao 发表于 2004-7-3 09:19:00

我说的是,能用point_array[=或       =point_array形式赋值吗???

boaosun 发表于 2004-7-3 10:38:00

当然可以!

dipenghao 发表于 2004-7-4 09:05:00

不好意思,能够完整的写一下吗、从类的定义到赋值

boaosun 发表于 2004-7-4 19:36:00

<TABLE height="100%">
<TBODY>
<TR>
<TD colSpan=2><FONT id=text1 style="FONT-SIZE: 10pt" face="宋体,verdana, arial, helvetica">模拟任意维数组的类 <BR>以下是一个可以模拟任意维数组的类.大小可以任意指定.<BR>缺点是创建起来比较麻烦,需要一个维对应的大小的数组.<BR><BR>基本能模拟取地址.operator [].任意维大小的分配.<BR><BR>以及智能的内存分配.(在内存里是连续的.只分配了一次内存.)<BR><BR><BR>#include "stdafx.h"<BR>#include <IOSTREAM><BR>#include <ASSERT.H><BR>using namespace std;<BR><BR>template <TYPENAME T,int Dim>class CArray<BR>{<BR>public:<BR>CArray()<BR>{<BR>m_pArrays = NULL;<BR>m_DimSize = 0;<BR>m_pData = NULL;<BR>}<BR><BR>CArray(int* DimSize,T* pMem = NULL)<BR>{<BR>m_pData = NULL;<BR>Create(DimSize,pMem);<BR>}<BR><BR>/*<BR>创建<BR>*/<BR>void Create(int* DimSize,T* pMem = NULL)<BR>{<BR>int size = 1;<BR>m_pData = NULL;<BR>//内存只有被创建一次<BR>if(pMem == NULL)<BR>{ <BR>for(int i = 0 ; i &lt; Dim; i++)<BR>{<BR>size *= DimSize;<BR>}<BR>pMem = new T;<BR>m_pData = pMem;<BR>}<BR><BR>m_pArrays = new CArray<T,DIM-1>[*DimSize];<BR>m_DimSize = *DimSize ;<BR><BR>int d_Mem = size / m_DimSize ;<BR>for(int i = 0; i&lt; m_DimSize ; i++)<BR>{<BR>m_pArrays.Create((DimSize + 1),pMem + d_Mem * i);<BR>}<BR><BR>}<BR><BR>T* operator &amp;()<BR>{<BR>return &amp;(m_pArrays);<BR>}<BR><BR>CArray<T,DIM-1>&amp; operator[](int index)<BR>{<BR>assert(index &lt; m_DimSize &amp;&amp; index &gt;= 0);<BR>return m_pArrays;<BR>}<BR><BR>void Free()<BR>{<BR>delete [] m_pArrays;<BR>m_pArrays = NULL;<BR>if(m_pData != NULL)<BR>{<BR>delete m_pData;<BR>m_pData = NULL;<BR>cout&lt;&lt;"T 类型内存被释放,该内存统一分配 "&lt;<DIM<<ENDL;<BR /> }<BR>}<BR><BR>~CArray()<BR>{<BR>Free();<BR>}<BR><BR>protected:<BR>CArray<T,DIM-1>* m_pArrays;<BR>int m_DimSize ;<BR>T* m_pData;<BR><BR><BR>};<BR>template <TYPENAME T>class CArray<T,1><BR>{<BR>public:<BR>CArray()<BR>{<BR>m_Data = NULL;<BR>m_DimSize = 0;<BR>m_bNeedDelete = false;<BR>}<BR><BR>CArray(int* DimSize,T* pMem)<BR>{<BR>m_bNeedDelete = false;<BR>Create(DimSize,pMem);<BR>}<BR>void Create(int size,T* pMem)<BR>{<BR>if(pMem == NULL)<BR>{<BR>pMem = new T;<BR>m_bNeedDelete = true;<BR>}<BR>m_Data =pMem;<BR>m_DimSize = size;<BR>}<BR><BR>T* operator &amp;()<BR>{<BR>return m_Data; <BR>}<BR>void Create(int* DimSize,T* pMem)<BR>{<BR>if(pMem == NULL)<BR>{<BR>pMem = new T];<BR>m_bNeedDelete = true;<BR>}<BR>m_Data = pMem;<BR>m_DimSize = DimSize;<BR>}<BR>T&amp; operator[](int index)<BR>{<BR>assert(index &lt; m_DimSize &amp;&amp; index &gt;= 0);<BR>return m_Data;<BR>}<BR>void Free()<BR>{<BR>if( m_bNeedDelete)<BR>{<BR>delete [] m_Data;<BR>m_Data = NULL;<BR>cout&lt;&lt;"T 类型内存被释放"&lt;<ENDL;<BR /> }<BR>}<BR><BR>~CArray()<BR>{<BR>Free();<BR>}<BR><BR>public:<BR>T* m_Data;<BR>int m_DimSize ;<BR>bool m_bNeedDelete;<BR>};<BR><BR>int _tmain(int argc, _TCHAR* argv[])<BR>{<BR>int dimSize = {4,6,7,7};<BR>/*<BR>CArray 为 4 6 7 7的数组<BR>*/<BR>CArray<INT , 4> array;<BR>array.Create(dimSize);<BR>array = 1;<BR>int* pT = &amp;(array);<BR>cout&lt;&lt;"pT : "&lt;<PT<<ENDL;<BR /> <BR>int* pT2 = &amp;array;<BR>*pT2 = 234;<BR>cout&lt;&lt;"array: "&lt;<ARRAY<<ENDL;<BR /> cout&lt;&lt;"array: "&lt;<ARRAY<<ENDL;<BR /> return 0;<BR>}</FONT> </TD></TR>
<TR>
<TD vAlign=bottom colSpan=2><BR><BR></TD></TR></TBODY></TABLE>

dipenghao 发表于 2004-7-5 19:20:00

谢谢谢谢 能否告知老兄qq号,以后还请多执教 我的:qq 11170444
页: [1]
查看完整版本: 如何在arx中动态分配二维数组????