638得票30回答
如何使用new在C++中声明一个二维数组?

我如何使用 new 声明一个二维数组? 例如,对于“普通”的数组,我会这样做:int* ary = new int[Size] 但是int** ary = new int[sizeY][sizeX] a) 不能工作/编译,b) 也没有实现什么:int ary[sizeY][sizeX] 做什么。

185得票18回答
删除指针后将其置为NULL是一种好的做法吗?

首先,我要说的是,使用智能指针,你就不必再担心这个问题了。 以下代码有什么问题?Foo * p = new Foo; // (use p) delete p; p = NULL; 这是由另一个问题的 答案和评论 引发的。其中来自Neil Butterworth的一条评论获得了几个赞: ...

101得票2回答
正确分配多维数组

这个问题的意图是提供一个关于如何在C语言中正确分配多维数组的参考。即使在一些C编程书籍中,这个主题往往被误解和解释不清楚。因此,即使经验丰富的C程序员也会在这方面遇到困难。 我从我的编程老师/教材/教程上学到,动态分配多维数组的正确方法是使用指向指针的指针。 然而,一些在SO上声望很高...

69得票2回答
std::array<>是否只保证在栈上分配内存?

不使用 new 关键字,std::array&lt;int,10&gt; 是否有保证被 C++ 标准在栈上而不是堆上分配内存? 需要澄清的是,我不是指 new std::array&lt;int, 10&gt;,我主要想知道标准库是否允许在其实现中使用 new 关键字。

47得票4回答
使用指向一次性分配内存的指针是明确定义的吗?

在C语言中,可以创建一个指针,使其指向数组最后一个元素的下一个位置,并在指针算术运算中使用它,只要你不对其进行解引用操作就可以。int a[5], *p = a+5, diff = p-a; // Well-defined 然而,这些是未定义行为:p = a+6; int b = *(a+5)...

43得票5回答
退出前我应该释放内存吗?

如果我因为错误而退出程序,是否应该释放所有已分配的内存?something = (char**) malloc (x * sizeof(char*)); for (i = 0; i &lt; x; i++) something[i] = (char*) malloc (y + 1); ...

33得票9回答
在C++中使用动态分配的数组有什么问题?

就像以下的代码:int size = myGetSize(); std::string* foo; foo = new std::string[size]; //... // using the table //... delete[] foo; 我听说在某些情况下这种使用方式(不是特指这段代...

32得票6回答
堆栈中的内存分配

这可能看起来是一个非常基本的问题,但一直在我的脑海中: 当我们分配一个局部变量时,它会进入堆栈。同样,动态分配会导致变量进入堆。现在,我的问题是,这个变量实际上是否位于堆栈或堆上,还是我们只是在堆栈和堆中有一个引用。 例如,假设我声明一个变量int i。现在这个i被分配在堆栈上。因此,当我...

27得票8回答
动态分配数组的大小如何确定?

为什么无法获取以此方式分配的缓冲区的长度。AType * pArr = new AType[nVariable]; 当同一数组被释放时delete [] pArr; 运行时需要知道需要释放的内存大小。是否有方法在删除数组之前访问其长度?如果没有,为什么没有提供可以获取长度的API?

24得票2回答
`new auto`是什么作用?

当我使用new auto时,这是什么意思?考虑下面的表达式:new auto(5) 动态分配的对象是哪种类型?它返回的指针是哪种类型?