由一次程序崩溃引起的对 new 表达式的再次学习
作者:网络转载 发布时间:[ 2016/5/10 13:40:15 ] 推荐标签:测试开发技术 .NET
1. 起因
某天,一个同事跟我反馈说在windows上调试公司产品的一个交易核心时出现了使用未初始化的指针导致后台服务崩溃的情况。示例代码如下所示:
struct sample
{
int* ptr_table[4][4];
//... other members
};
void test()
{
sample* sample_ptr = new sample[10];
for (int i = 0; i < 4; i++)
sample_ptr[0].ptr_table[0][i] = new int(i);
// 实际系统中是根据初始化数据对sample_ptr数组中的对象进行赋值,但不是所有的对象都有初始化数据;
int* int_ptr = sample_ptr[0].ptr_table[0][0];
if (int_ptr != NULL)
{
printf("ptr1 = 0x%x
", int_ptr);
*int_ptr = 100;
}
int_ptr = sample_ptr[1].ptr_table[0][0];
if (int_ptr != NULL)
{
printf("ptr2 = 0x%x
", int_ptr);
*int_ptr = 100; // crashed here!
}
}
将sample* sample_ptr = new sample[10]这行改为sample* sample_ptr = new sample[10]()后两个系统执行的结果变一样了,都是被初始化的内存。
那么问题来了:
(1) 为什么相同的代码(new sample[10])在两个系统下表现形式不一样呢?是两个系统的内存分配机制的原因还是类库的原因?
(2) new sample[10]和new sample[10]()的区别到底是什么?
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11