10得票4回答
free()函数释放内存后,该内存的内容会变得不确定。

我知道在硬盘上,如果你删除一个文件,数据并不会(立即)消失。只有当数据被覆盖时,它才会消失。我想知道在内存中是否存在类似的概念。比如说,如果我为一个字符串分配了256个字节,那么即使我使用 free() 释放了它,这个字符串是否仍然漂浮在内存中,直到被覆盖?

19得票5回答
calloc比malloc更好吗?

我最近才学习了C语言中的calloc()函数。阅读了它的描述以及与malloc的区别 (1, 2)后,我认为,作为一名非嵌入式程序员,我应该总是使用calloc()。但这是否真的是这样呢? 我有一个保留意见,就是访问calloc()分配的内存会有额外的延迟,但我也想知道是否有一些情况,在这些...

7得票1回答
在new表达式中,初始化器是否在内存分配之后被评估?

考虑以下代码: auto p = new T( U(std::move(v)) ); 接下来的初始化程序是U(std::move(v))。假设T( U(std::move(v)) )不会抛出异常。如果在底层内存分配之后评估初始化程序,则代码是强异常安全的。否则,它就不是。如果内存分配抛出...

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

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

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

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

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

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

7得票4回答
使用动态内存分配创建的包含字符串值的结构体在赋值时会导致分段错误

编译器在以下代码上抛出运行时段错误: #include <iostream> #include <string> using namespace std; struct Node{ int data; void *next; string node...

7得票2回答
在C语言中动态内存分配,使用malloc()函数分配的内存如何释放?

有没有办法通过使用malloc()来释放你创建的一部分内存? 假设: int *temp; temp = ( int *) malloc ( 10 * sizeof(int)); free(temp); free()函数将释放所有20个字节的内存,但是如果我只需要10个字节,我能否仅...

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

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

72得票4回答
C++11中推荐的内存对齐方式是什么?

我正在开发一个单生产者单消费者环形缓冲区实现。我有两个要求: 将单个堆分配的环形缓冲区实例对齐到缓存行。 将环形缓冲区内的字段对齐到缓存行(以防止伪共享)。 我的类大致如下: #define CACHE_LINE_SIZE 64 // To be used later. temp...