【发布时间】:2013-06-04 21:57:08
【问题描述】:
我最终决定永远学习C++,我在一本增加数组大小的书中遇到了下面的代码。该函数接受一个指向具有原始大小的数组的指针,并返回一个大小为两倍的新数组。
int *doubleArraySize(int *p_array, int *p_size) {
*p_size *= 2;
int *p_new_array = new int[*p_size];
for(int i = 0; i < *p_size; i++)
p_new_array[i] = p_array[i];
delete[] p_array;
return p_new_array;
}
当我们到达 for 循环时,*p_size 的值已经翻了一番。这意味着(至少对我而言)当我们访问p_array[i] 时,我们最终会进入不属于p_array 的内存区域。这是一个问题吗?这段代码会崩溃吗?如果没有,我错过了什么?
【问题讨论】:
-
你在某个时候不需要malloc吗?
-
@njzk2 在 C++ 中?你什么时候也可以使用
new? -
“这段代码会崩溃吗”?可能,也可能不是,或者可能只是在满月:) 关键是,这是未定义的行为,除非
new抛出并且你永远不会进入循环。 -
您不应该为此使用标准库吗?你知道
std::unique_ptr或std::vector之类的东西吗? -
这段代码有很多麻烦:如果任何指针为空怎么办?如果
p_array不是用new[]构造的呢?
标签: c++ arrays memory-leaks dynamic-memory-allocation