【发布时间】:2011-10-29 08:37:12
【问题描述】:
如果我想在 C++ 中动态创建一个 int 数组,然后再将其删除,是否需要 null 终止该 int 数组?如果是这样,我该怎么做?如果不是,计算机如何知道要释放多少内存?
int *array = new int[x];
..do some stuff..
delete array;
我知道对于一个 char 数组,它最多删除一个空字符 ('\0'),如果你的字符串中没有终止空字符,你可能会遇到内存冲突错误,但这如何适用于整数数组(和其他数组,如结构数组)?
【问题讨论】:
-
"如果我想在 C++ 中动态创建一个 int 数组,然后稍后将其删除" 你不应该这样做。您应该使用为您管理内存的
std::vector<int>,或者使用std::unique_ptr<int[]>/std::shared_ptr<int[]>/boost::shared_array<int>/boost::scoped_array<int>,这将在正确的时间销毁数组。 -
"我知道对于一个 char 数组,它最多删除一个空字符 ('\0')" 这根本不是真的;你为什么这么认为?
-
嗯,我觉得说你不应该这样做有点过分了。总的来说,我同意你的看法,但有时你想使用低级 C - 例如速度或与使用数组作为函数参数的库进行交互。是的,尽可能使用类库——在大多数情况下,便利性和安全性胜过过度优化速度,但不是全部。
-
@iandotkelly:C 数组不比向量快。并且使用
&v[0],您可以直接访问包含在其中的接受指针的函数的数组。 -
@Benjamin Lindley - 只是出于好奇(来自 C、C# 和 Objective-C 程序员的真正问题)您可以通过引用将更改其内容的函数来传递底层数组吗?如果是这样,如果那仍然安全,我印象深刻。即使在这个时代,仍然认为了解 C 数组的工作原理是值得的 ;-)