malloc相关内容

malloc() 内部是如何实现的?

谁能解释一下 malloc() 在内部是如何工作的? 我有时会做strace 程序,我看到很多sbrk 系统调用,做man sbrk 谈到它在malloc() 但仅此而已. 解决方案 sbrk系统调用移动数据段的“边界".这意味着它移动了程序可以读/写数据的区域的边界(让它增长或缩小,尽管 AFAIK 没有 malloc 确实使用该方法将内存段返回给内核).除此之外,还有 mmap ..
发布时间:2021-12-21 09:49:47 其他开发

free 和 malloc 如何在 C 中工作?

我想弄清楚如果我尝试从“中间"释放一个指针会发生什么例如,看下面的代码: char *ptr = (char*)malloc(10*sizeof(char));for (char i=0 ; i 我因未处理的异常错误消息而崩溃.我想了解免费为什么以及如何工作,这样我不仅知道如何使用它,而且还能够理解奇怪的错误和异常,并更好地调试我的代码. 非常感谢 解决方案 当你 malloc ..
发布时间:2021-12-21 09:47:37 其他开发

<stdlib.h> 之间的区别和 <malloc.h>

当我在 C 程序中使用 malloc 时,收到警告: warning: 内置函数 'malloc' 的不兼容隐式声明 [默认启用] 然后我可以包含 或 以摆脱 warning 尽管它有效也没有它. 所以我想知道,当我不包含任何内容时,这些标题与 gcc 链接的标题之间有什么区别? (我使用 ubuntu 12.04 64 位 和 gcc 4.6.3) 解决方案 ..
发布时间:2021-12-18 23:07:03 其他开发

为什么每次使用 malloc 时都会收到警告?

如果我在代码中使用 malloc: int *x = malloc(sizeof(int)); 我从 gcc 得到这个警告: new.c:7: 警告:函数‘malloc’的隐式声明new.c:7:警告:内置函数‘malloc’的隐式声明不兼容 解决方案 您需要添加: #include 该文件包含内置函数 malloc 的声明.如果你不这样做,编译器会认为你想定义你自己的名为 mal ..
发布时间:2021-12-18 23:06:30 其他开发

在 GCC 中对齐 malloc()?

在 GCC 或 glibc 中是否有任何标准化函数可以在对齐的指针处分配内存块?像 _align_malloc() 在 MSVC 中? 解决方案 参见 memalign 函数系列. ..
发布时间:2021-12-18 22:49:43 其他开发

malloc() 与 HeapAlloc()

malloc() 和 HeapAlloc() 有什么区别?据我了解 malloc 从堆中分配内存,就像 HeapAlloc 一样,对吗? 那有什么区别? 谢谢! 解决方案 他们都从堆分配内存是对的.但也有区别: malloc() 是可移植的,是标准的一部分. HeapAlloc() 不可移植,它是一个 Windows API 函数. 很可能,在 Windows 上 ..
发布时间:2021-12-18 00:03:40 C/C++开发

mach_vm_map 失败(错误代码=3)

浏览我的 iPAD 应用程序一段时间后,我注意到应用程序的响应速度越来越慢,最后我的应用程序崩溃并出现以下错误 AppName(1779,0x3d12d18c) malloc: *** mach_vm_map(size=167936) failed (error code=3)*** 错误:无法分配区域*** 在 malloc_error_break 中设置断点进行调试Jan 7 11:34: ..
发布时间:2021-12-14 16:26:10 其他开发

malloc() 和 malloc_consolidate() 中的段错误

当我查看 gdb 中的回溯时,我的应用程序有时会出现段错误,主要是在 malloc() 和 malloc_consolidate() 中. 我确认机器有足够的可用内存,它甚至没有开始交换.我检查了数据段的 ulimits 和最大内存大小,两者都设置为“无限制".我也在 valgrind 下运行该应用程序,没有发现任何内存错误. 现在我不知道还有什么可能导致这些段错误.有什么想法吗? ..
发布时间:2021-12-14 08:52:26 C/C++开发

在 gdb 中包含 malloc.c 的源代码?

如何在 gdb 中包含/查看 malloc 的源代码? 我想在gdb中一步步执行,在调用任何malloc函数时,进入malloc.c源代码. 目前gdb所说的是:malloc.c:没有那个文件或目录. 这个这里的人遇到了同样的问题,但他们确实遇到了不提解决方案,即如何真正进入malloc的源代码. 我在 Ubuntu server 14.04 上,我已经尝试安装以下内容:l ..
发布时间:2021-12-14 08:26:40 其他开发

释放内存后我们如何访问指针?

根据我的理解, free() 用于释放我们之前使用 malloc 分配的内存. 在下面的代码片段中,我释放了分配的内存.但是即使在释放后我也能够访问指针?怎么可能? 免费内部如何运作? #include使用命名空间标准;int main(){int *p=(int *)malloc(sizeof(int));*p=17;免费(p);*p=*p+1;printf("\n 释放内存 ..
发布时间:2021-12-13 13:38:21 其他开发

C 警告:函数返回局部变量的地址

下面的函数采用包含应用程序调用路径的 argv[0] 参数并替换最后一位,直到它遇到一个“/",其中包含我想要生成的位于同一文件夹中的新应用程序的名称. 顺便说一句:我声明了一个全局 argv 变量,以便函数可以访问它,因为我不想在每个函数调用中传递信息. 当我编译我的代码时,似乎一切正常,但我收到了上述警告. 我知道我正在声明变量,一旦函数返回它就会被销毁. 作为一名初学 ..
发布时间:2021-12-13 13:17:07 其他开发

检查一个指针是否指向堆上分配的内存

我想知道一个指针是否指向一块用malloc/new分配的内存.我意识到任意地址的答案是“不,你不能",但我确实认为可以覆盖 malloc/free 并跟踪分配的内存范围. 您知道提供此特定工具的内存管理库吗? 您了解生产代码吗? Valgrind 很棒,但仪器太多(慢),正如 Will 所说,我们不想像这样使用 Valgrind(使软崩溃就足够了). Mudflap 是一个非常好的 ..
发布时间:2021-12-13 13:17:00 C/C++开发

在 C 中分配矩阵

我想分配一个矩阵. 这是唯一的选择吗: int** mat = (int**)malloc(rows * sizeof(int*))for (int index=0;index 解决方案 嗯,你没有给我们一个完整的实现.我猜你是这个意思. int **mat = (int **)malloc(rows * sizeof(int*));for(int i = 0; i ..
发布时间:2021-12-13 13:15:47 其他开发

从 K&R 书中解释 malloc 的这种实现

这是Kernighan 和 Ritchie 关于 C 的书的摘录.它展示了如何实现一个版本的 malloc.虽然评论很好,但我很难理解它.有人可以解释一下吗? typedef long Align;/* 对齐到长边界 */union header {/* 块头 */结构{联合头 *ptr;/* 下一个块如果在空闲列表中 */无符号大小;/* 这个块的大小 */} s;对齐 x;/* 强制块对齐 ..
发布时间:2021-12-13 13:14:47 其他开发

C - 在内存被释放()之后访问数据?

我在标准 C 中阅读了很多关于 malloc() 和 free() 的内容.据我所知,你 malloc() 只需要一次内存,然后你 free() 相同的内存恰好一次.这可能是不好的做法,但我知道在你 malloc() 内存之后,你可以定义多个指向它的指针.一旦你free()这些指针中的任何一个,分配的内存就会被取消分配? 考虑这个玩具示例: #include #include #inclu ..
发布时间:2021-12-13 13:14:29 其他开发

动态分配矩阵的函数

我想创建一个函数来分配(使用malloc/calloc)一个声明为双指针的矩阵.我了解双指针矩阵的工作原理以及如何使用 malloc 分配它,但是当我传递我的矩阵(在 main() 中声明并初始化为 NULL) 我的程序崩溃了.我想错误出在我的 allocMatrix() 函数上,因为如果我在 main 中分配矩阵,一切都会顺利进行.谢谢:-) 主要内容: #include #includ ..
发布时间:2021-12-13 13:05:58 其他开发

C - 在函数中分配矩阵

我正在尝试使用具有维度和三重指针的函数来分配矩阵.我已经分配了一个 int**(设置为 NULL)并且我将它的地址作为函数的参数传递.由于某种原因,这让我违反了内存访问. void allocationMatrix(int ***matrix, int row, int col){国际我;if((*matrix = (int**)malloc(row * sizeof(int*))) == NU ..
发布时间:2021-12-07 23:24:19 其他开发

malloc 线程安全吗?

malloc() 函数是否可重入? 解决方案 我在某处读到,如果您使用 -pthread 进行编译,malloc 将成为线程安全的.我很确定它的实现依赖,因为 malloc 是 ANSI C 而线程不是. 如果我们在谈论 gcc: 编译和链接 -pthread 和malloc() 将是线程安全的,在 x86 上和 AMD64. http://groups.google.c ..
发布时间:2021-12-06 11:29:07 其他开发