c++ new长度为0的数组
2013-10-25 17:39
330 查看
在程序中发现一下代码:
[align=left]代码中没有判断 iArrayLen 的值为0的情况, 如果iArrayLen =0, [/align]
[align=left]LPDiskRunningInfo pDiskRunningInfo = new DiskRunningInfo [iArrayLen ][/align]
[align=left]执行成功, 而且指针也可以正常的赋值和操作. [/align]
[align=left]但是在删除的时候弹出堆栈异常, 提示"其原因可能是堆被损坏".[/align]
[align=left] [/align]
[align=left]c++是不允许定义长度为0的数组的, 如果定义 char sz[0]; 编译器报错: error C2233: “Target of operator new()” : 包含大小为零的数组的对象数组是非法的.[/align]
[align=left] [/align]
[align=left]但是在new一个长度为0数组时,编译不报错, 也返回一个正常的指针地址, 但是实际没有分配内存, 当修改数据时就会导致内存被破坏. 当被破坏的内存恰好被使用时就会导致异常.[/align]
int CHmcVideoMgt ::OnGetDiskRunningInfo( SOCKETPARAM *pSocketInfo ,Json:: Value Param ) { int iArrayLen = Param[ _T("NUM" )].asInt(); ..... LPDiskRunningInfo pDiskRunningInfo = new DiskRunningInfo[iArrayLen ]; int nResult = HMCBLL_GetDiskRunningInfo(pDiskRunningInfo ,iArrayLen); SAFE_DELETE_POINTER_ARRAY (pDiskRunningInfo); return E_SUCCEED ; }
[align=left]代码中没有判断 iArrayLen 的值为0的情况, 如果iArrayLen =0, [/align]
[align=left]LPDiskRunningInfo pDiskRunningInfo = new DiskRunningInfo [iArrayLen ][/align]
[align=left]执行成功, 而且指针也可以正常的赋值和操作. [/align]
[align=left]但是在删除的时候弹出堆栈异常, 提示"其原因可能是堆被损坏".[/align]
[align=left] [/align]
[align=left]c++是不允许定义长度为0的数组的, 如果定义 char sz[0]; 编译器报错: error C2233: “Target of operator new()” : 包含大小为零的数组的对象数组是非法的.[/align]
[align=left] [/align]
[align=left]但是在new一个长度为0数组时,编译不报错, 也返回一个正常的指针地址, 但是实际没有分配内存, 当修改数据时就会导致内存被破坏. 当被破坏的内存恰好被使用时就会导致异常.[/align]
相关文章推荐
- C++ new 长度为0的数组
- 长度为0的数组
- 一维数组中最长递增子序列的长度(DP做法)
- Effective Java 读书笔记——43:返回零长度的数组或者集合,而不是null
- 在一个长度为10的整型数组里面,保存了班级10个学生的考试成绩。要求编写5个函数,分别实现计算考试的总分,最高分,最低分,平均分和考试成绩降序排序
- 二分+长度为n*n的有序数组中的k的个数。
- Java--给定两个有序的数组,长度分别为m和n,求这两个数组中的第K个元素。
- 重点在确定字符数组的长度!!防止数组越界
- GNU C中的零长度数组
- 求字符数组中字符串的长度strlen(自实现)
- 零长度的数组
- 微软面试题:求整数随机数构成的数组中找到长度大于=3的最长的等差数列
- 第十四周项目一数组大折腾(4)创建一个长度为16的整形数组a并初始化,删除数组中所有能被3整除的元素(数组中实际有效使用的元素将不足16),输出删除后数组中的全部元素
- LeetCode--581. Shortest Unsorted Continuous Subarray(最短的无序数组长度)Python
- 结构体最后的长度为0或1数组的作用(转载)
- js关联数组长度为0
- 用Java动态增加任意类型数组的长度
- java数组根据字符串长度排序,并根据包含关系返回最大字符串
- 数组最大连续长度