正文

[转]动态申请的问题2006-07-28 03:39:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/petibo/16900.html

分享到:

前几天写一个函数,需要一个不定长的数组,又由于是在函数中需要修改的,就做了下边的定义: PointStruct *pPoint=new PointStruct[]; pPoint[0].x=0; pPoint[1].x=1; ………… 想通过这样实现动态添加元素,后来发现只能申请到3个,pPoint[3]就不能被赋值了,编译没有出错提示,但一运行就报错。 之后又改为pPointStruct *pPoint=new PointStruct{1,2,3,4,……,n};之后再赋值pPoint[n+1]=n+1;pPoint[n+2]=n+2;……后来发现只能赋值到pPoint[2n+1],当再给pPoint[2n+2]赋值时,就又会出现编译没有错误,一运行就报错的情况。 总结:用pPointStruct *pPoint=new PointStruct{1,2,3,4,……,n};的形式申请了n个存储空间,但实际上还有另外n+1个空间,作为备用的,所以在申请n个之后还能继续添加,直到n+1个,再往后就不行了.至于PointStruct *pPoint=new PointStruct[];的形式为什么会有那样的结果,我也想不出来^_^,也许那本身就是一个错误的语句吧! 这些都是个人想的,不知道是否真的像我想的那样,希望各位有不同见解能说出来. 关于指针动态申请2 还是有关指针的动态申请空间的问题. 定义了PointStruct* pPointxy;      pPointxy=new PointStruct [4]; fun(x1,y1,x2,y2,pPointxy); 在程序中fun函数共执行了10次,每次执行之后都将pPointxy的每个元素赋给另外一个数组接收,调试发现最后一次执行fun函数的时候,pPointxy的最后一个元素的值就出现了异常. 仔细查找后发现很奇怪的现象,在fun前设置一个断点,在fun之后设置一个断点,当执行到第一个断点的时候,pPointxy的各个元素的值都正常,但当到下一个断点的时候,pPointxy的最后一个元素的值竟然发生了改变!我是在紧接着fun之后设的断点,两个断点之间根本就没有对pPontxy修改的语句.也就是说只在fun函数中被修改的pPointxy在函数执行结束之后出现了改变,而且是没有人为定义任何语句. 然后很偶然的将pPointxy的定义该为PointStruct pPointxy[4],再调试,没有出现任何异常. 至于原因,我也想不出来,容我再想想,再问问^_^

阅读(1729) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册