96得票6回答
何时以及为什么要使用malloc

嗯,我不明白何时以及为什么需要使用malloc来分配内存。 这是我的代码:#include <stdlib.h> int main(int argc, const char *argv[]) { typedef struct { char *name; ch...

8得票2回答
删除动态分配的向量会清除其内容吗?

假设我有以下内容: vector<string>* foo = new vector<string>(); 我向它添加了很多东西,使用后只需调用: delete foo; 我需要先调用foo.clear();吗?还是delete会调用析构函数。 请不要对这...

49得票5回答
当一个对象超出其作用域时,析构函数会被调用吗?

例如:int main() { Foo *leedle = new Foo(); return 0; } class Foo { private: somePointer* bar; public: Foo(); ~Foo(); }; Foo::...

25得票2回答
std::variant是否允许为其成员分配内存?

我在想,std::variant 的实现是否必须是“平坦的”,或者它是否允许为其成员动态分配内存,使得一系列变体会退化为指针序列,从而破坏缓存局部性。

9得票5回答
realloc()无效的旧大小。

我很愉快地参加了KandR C编程书的一个习题。该程序用于在用户输入的一组字符串中查找最长的行并将其打印出来。 以下是我部分的代码,其中有些部分直接引用了书中的内容: #include <stdio.h> #include <stdlib.h> int MAXLI...

18得票4回答
为什么运行环境不能决定是应用delete还是delete[]而需要程序员来决定?(这是一个关于IT技术的问题)

我读到过delete[]运算符是必需的,因为运行时环境不能保留分配块是否为需要调用析构函数的对象的信息,但它确实可以保留分配块存储在内存中的位置和块的大小。 只需要一个额外的元数据位来记住是否需要在delete时调用析构函数,那么为什么不这样做呢? 我很确定有一个很好的解释,我不怀疑它,我只...

28得票6回答
realloc()的正确使用方法

根据realloc函数的说明:realloc()函数会返回一个指向新分配内存的指针,该内存适合于任何类型的变量,并且可能与ptr不同,如果请求失败,则返回NULL。 因此,在这段代码片段中:ptr = (int *) malloc(sizeof(int)); ptr1 = (int *) r...

21得票3回答
双指针与指针数组(数组 vs *数组[])

我不太确定这两者之间有什么区别。我的教授写道“array与*array[]相同”,并且我们被演示了一个使用**array的例子(所以在课后,我尝试将其与*array[]交换,但它没有起作用),请问这两个是否真的如他所写?无论如何,这节课是关于动态内存分配的。 一旦我改变了双指针,这行代码就开...

20得票8回答
使用std::vector会带来什么额外的开销?

我知道通常情况下手动动态内存分配不是一个好主意,但是在某些情况下,它是否比使用例如std::vector更好的解决方案呢? 举个简单的例子,如果我需要存储一个n整数数组,其中n int* data = new int[n]; //assuming n is set beforehand 或者...

16得票2回答
为什么编译器要求使用 `delete [] p` 而不是 `delete p[]`?

在 C++ 中,如果你想动态分配一个数组,你可以这样做:int *p; p = new int[i]; // i is some number 然而,要删除数组,您需要使用 delete[] 而不是 delete。delete[] p; 为什么不是delete p[]?那样岂不更符合最初创建...