11得票3回答
在C++中,一个线程使用new分配的内存可以被另一个线程删除吗?

在glibc中,malloc是使用arenas实现的。例如,由线程A首先分配并稍后由free释放的内存可能无法被线程B中的另一个malloc调用使用,因为线程A和B可能在不同的arenas中,并且不同的arenas维护内存的不同堆和空闲列表。 当涉及到C++(也许还包括C++11,因为C++...

22得票4回答
指针数组的动态内存分配

我正在尝试编写一个程序,从文本文件中读取一系列字符串,并将它们存储在一个动态分配内存的字符串数组中。我的计划是使用指针将每个字符串存储在数组中,然后随着读入更多字符串来增加数组的大小。但我不明白为什么下面的测试代码无法正常工作。这个想法可行吗?char *aPtr; aPtr =(char*)...

11得票2回答
C++中的动态零长度数组

#include <stdlib.h> void *operator new[](size_t size, int n){ if( size != 0 && n != 0 ) return calloc(n, size); retu...

34得票7回答
不使用动态内存分配的Pimpl惯用语

我们希望在项目的某些部分使用pimpl模式。这些部分也恰好是禁止动态内存分配的部分,而这个决策不在我们的控制范围之内。 所以我的问题是,有没有一种干净而漂亮的实现pimpl模式的方法,而不需要动态内存分配? 编辑 以下是其他限制:嵌入式平台、标准C++98、无外部库、无模板。

7得票2回答
如何追踪C++标准库调用的内存分配?

考虑这个简单的例子: #include <algorithm> #include <iostream> #include <list> #include <numeric> #include <random> #include &l...

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

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

30得票4回答
当我对一个指针进行递增操作并且删除它时,为什么我的程序会崩溃?

在我解决一些编程练习时,我意识到我对指针有一个大误解。请问有人能解释一下为什么这段代码会导致C++崩溃吗?#include <iostream> int main() { int* someInts = new int[5]; someInts[0] = 1; ...

14得票2回答
在 "new int[5]{};" 中,"{}" 的作用是什么?

如果我们像这样写:int *arr = new int[5]; 在这种情况下,系统会动态为5个int类型的元素分配空间,并返回序列的第一个元素的指针。但是,当我看到以下代码时:int *arr = new int[5]{}; 那么,在new运算符后面的{}是什么意思?在这段代码中,{}的目的是...

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

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

7得票6回答
C++ - 使用“new”在堆上分配内存

如果我有以下语句: ```int *x = new int;``` 在这种情况下,我动态地在堆上分配了内存。换句话说,现在我有一个保留的内存地址用于一个整数对象。 接着我执行了以下操作: ```delete x;``` 这意味着我释放了堆上的内存地址。 然后我又执行了以下操作: ...