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

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

16得票5回答
什么时候应该使用calloc而不是malloc

这是来自Beej的C语言指南:“使用calloc()的缺点在于它花费时间来清除内存,并且在大多数情况下,您不需要清除它,因为您只会覆盖它。但如果您发现自己在malloc()一个块之后立即将内存设置为零,那么您可以使用calloc()一次性完成此操作。” 那么什么是需要将内存清零的潜在场景呢?

16得票1回答
_int_malloc和malloc(在Valgrind中)有什么区别?

我很惊讶地发现找不到任何文件说明Valgrind的callgrind工具输出中_int_malloc和malloc的区别。 有人能解释一下它们的区别吗? 此外,我实际上编写的是C++代码,因此我专门使用new而不是malloc,但在callgrind输出中只显示了malloc。

16得票2回答
ptmalloc实现的代码描述

我希望了解在GNU/Linux系统中低级别下动态内存管理是如何工作的(也就是说,ptmalloc的工作原理)。 当然,我已经阅读了代码,但还有很多疑问。我或多或少地了解数据结构,但仍有许多信息泄漏! 我的问题是,是否有人了解任何详细解释实现的资源。例如,我已经阅读了诸如“通过打破它来理解堆...

15得票8回答
释放指针变量后重新分配给它

这样做合法吗?在释放了 ptr 后,你能否将其分配给其他值? int * ptr = (int*) malloc(sizeof(int)); free(ptr); ptr = (int *) malloc(sizeof(int));

15得票4回答
关键错误 c0000374 - C++ dll返回了指向未分配内存的指针给C#

我有一个C++的dll,为我的主要C#应用程序提供了一些功能。在这里,我试图读取文件,将其加载到内存中,然后向C#返回一些信息,例如加载数据的指针和内存块的计数。Dll成功地将文件读入内存,但在返回主应用程序时,由于堆破坏而导致程序崩溃(检测到关键错误c0000374)。 代码非常简单明了,...

15得票2回答
std::string::reserve和字符串结尾的0

当使用std::string::reserve进行预分配时,我是否必须显式地添加一个终止的0以避免重新分配和后续复制? 例如,假设知道字符串"Hello"的长度为5将存储在std::string str中,那么我是否需要调用str.reserve(6)? 如果我正确阅读了标准,那么我认为答...

15得票6回答
堆内存分配

如果我在程序中使用malloc()动态分配内存,但在程序运行期间没有释放内存,那么动态分配的内存将会在程序终止后被释放吗? 如果没有释放,然后我一遍又一遍地执行同一个程序,它会每次都分配不同的内存块吗?如果是这样的话,我该如何释放那些内存? 注:我能想到的一个答案是重新启动正在执行该程序的...

14得票1回答
在__device__函数中分配CUDA内存

在CUDA中,是否有一种方式可以在设备端函数中动态分配内存?我找不到任何这样的示例。根据CUDA C编程手册:B.15 动态全局内存分配void* malloc(size_t size); void free(void* ptr); 从全局内存的固定大小堆中动态分配和释放内存。 CUDA内...

14得票9回答
使用operator new/malloc分配的内存块能否在程序执行结束后继续存在?

可能是重复问题: 当您退出C程序时,malloc分配的内存是否会自动释放? 当我了解到在C/C++中进行动态内存分配时,使用delete/free是强制性的时,这个问题就浮现在我的脑海中。我想,如果内存分配超出了程序执行的终止,则必须进行释放;否则,为什么要担心释放已分配的空间呢...