malloc相关内容
谁能解释一下 malloc() 在内部是如何工作的? 我有时会做strace 程序,我看到很多sbrk 系统调用,做man sbrk 谈到它在malloc() 但仅此而已. 解决方案 sbrk系统调用移动数据段的“边界".这意味着它移动了程序可以读/写数据的区域的边界(让它增长或缩小,尽管 AFAIK 没有 malloc 确实使用该方法将内存段返回给内核).除此之外,还有 mmap
..
我想弄清楚如果我尝试从“中间"释放一个指针会发生什么例如,看下面的代码: char *ptr = (char*)malloc(10*sizeof(char));for (char i=0 ; i 我因未处理的异常错误消息而崩溃.我想了解免费为什么以及如何工作,这样我不仅知道如何使用它,而且还能够理解奇怪的错误和异常,并更好地调试我的代码. 非常感谢 解决方案 当你 malloc
..
当我在 C 程序中使用 malloc 时,收到警告: warning: 内置函数 'malloc' 的不兼容隐式声明 [默认启用] 然后我可以包含 或 以摆脱 warning 尽管它有效也没有它. 所以我想知道,当我不包含任何内容时,这些标题与 gcc 链接的标题之间有什么区别? (我使用 ubuntu 12.04 64 位 和 gcc 4.6.3) 解决方案
..
如果我在代码中使用 malloc: int *x = malloc(sizeof(int)); 我从 gcc 得到这个警告: new.c:7: 警告:函数‘malloc’的隐式声明new.c:7:警告:内置函数‘malloc’的隐式声明不兼容 解决方案 您需要添加: #include 该文件包含内置函数 malloc 的声明.如果你不这样做,编译器会认为你想定义你自己的名为 mal
..
在 GCC 或 glibc 中是否有任何标准化函数可以在对齐的指针处分配内存块?像 _align_malloc() 在 MSVC 中? 解决方案 参见 memalign 函数系列.
..
malloc() 和 HeapAlloc() 有什么区别?据我了解 malloc 从堆中分配内存,就像 HeapAlloc 一样,对吗? 那有什么区别? 谢谢! 解决方案 他们都从堆分配内存是对的.但也有区别: malloc() 是可移植的,是标准的一部分. HeapAlloc() 不可移植,它是一个 Windows API 函数. 很可能,在 Windows 上
..
浏览我的 iPAD 应用程序一段时间后,我注意到应用程序的响应速度越来越慢,最后我的应用程序崩溃并出现以下错误 AppName(1779,0x3d12d18c) malloc: *** mach_vm_map(size=167936) failed (error code=3)*** 错误:无法分配区域*** 在 malloc_error_break 中设置断点进行调试Jan 7 11:34:
..
当我查看 gdb 中的回溯时,我的应用程序有时会出现段错误,主要是在 malloc() 和 malloc_consolidate() 中. 我确认机器有足够的可用内存,它甚至没有开始交换.我检查了数据段的 ulimits 和最大内存大小,两者都设置为“无限制".我也在 valgrind 下运行该应用程序,没有发现任何内存错误. 现在我不知道还有什么可能导致这些段错误.有什么想法吗?
..
如何在 gdb 中包含/查看 malloc 的源代码? 我想在gdb中一步步执行,在调用任何malloc函数时,进入malloc.c源代码. 目前gdb所说的是:malloc.c:没有那个文件或目录. 这个这里的人遇到了同样的问题,但他们确实遇到了不提解决方案,即如何真正进入malloc的源代码. 我在 Ubuntu server 14.04 上,我已经尝试安装以下内容:l
..
根据我的理解, free() 用于释放我们之前使用 malloc 分配的内存. 在下面的代码片段中,我释放了分配的内存.但是即使在释放后我也能够访问指针?怎么可能? 免费内部如何运作? #include使用命名空间标准;int main(){int *p=(int *)malloc(sizeof(int));*p=17;免费(p);*p=*p+1;printf("\n 释放内存
..
下面的函数采用包含应用程序调用路径的 argv[0] 参数并替换最后一位,直到它遇到一个“/",其中包含我想要生成的位于同一文件夹中的新应用程序的名称. 顺便说一句:我声明了一个全局 argv 变量,以便函数可以访问它,因为我不想在每个函数调用中传递信息. 当我编译我的代码时,似乎一切正常,但我收到了上述警告. 我知道我正在声明变量,一旦函数返回它就会被销毁. 作为一名初学
..
我想知道一个指针是否指向一块用malloc/new分配的内存.我意识到任意地址的答案是“不,你不能",但我确实认为可以覆盖 malloc/free 并跟踪分配的内存范围. 您知道提供此特定工具的内存管理库吗? 您了解生产代码吗? Valgrind 很棒,但仪器太多(慢),正如 Will 所说,我们不想像这样使用 Valgrind(使软崩溃就足够了). Mudflap 是一个非常好的
..
我想分配一个矩阵. 这是唯一的选择吗: int** mat = (int**)malloc(rows * sizeof(int*))for (int index=0;index 解决方案 嗯,你没有给我们一个完整的实现.我猜你是这个意思. int **mat = (int **)malloc(rows * sizeof(int*));for(int i = 0; i
..
这是Kernighan 和 Ritchie 关于 C 的书的摘录.它展示了如何实现一个版本的 malloc.虽然评论很好,但我很难理解它.有人可以解释一下吗? typedef long Align;/* 对齐到长边界 */union header {/* 块头 */结构{联合头 *ptr;/* 下一个块如果在空闲列表中 */无符号大小;/* 这个块的大小 */} s;对齐 x;/* 强制块对齐
..
我在标准 C 中阅读了很多关于 malloc() 和 free() 的内容.据我所知,你 malloc() 只需要一次内存,然后你 free() 相同的内存恰好一次.这可能是不好的做法,但我知道在你 malloc() 内存之后,你可以定义多个指向它的指针.一旦你free()这些指针中的任何一个,分配的内存就会被取消分配? 考虑这个玩具示例: #include #include #inclu
..
我想创建一个函数来分配(使用malloc/calloc)一个声明为双指针的矩阵.我了解双指针矩阵的工作原理以及如何使用 malloc 分配它,但是当我传递我的矩阵(在 main() 中声明并初始化为 NULL) 我的程序崩溃了.我想错误出在我的 allocMatrix() 函数上,因为如果我在 main 中分配矩阵,一切都会顺利进行.谢谢:-) 主要内容: #include #includ
..
我对此很好奇: 有什么区别: const int MAX_BUF = 1000;char* Buffer = malloc(MAX_BUF); 和: 字符缓冲区[MAX_BUF]; 解决方案 案例 1:在 char 缓冲区[MAX_BUF]; Buffer 是一个数组,大小为MAX_BUF.分配技术称为VLA. 案例 2:在 const int MAX_BUF
..
我在几个不同的函数中有一些代码,看起来像这样: void someFunction (int *data) {数据 = (int *) malloc (sizeof (data));}void useData (int *data) {printf ("%p", 数据);}int主(){int *数据 = NULL;someFunction(数据);使用数据(数据);返回0;} someFun
..
我正在尝试使用具有维度和三重指针的函数来分配矩阵.我已经分配了一个 int**(设置为 NULL)并且我将它的地址作为函数的参数传递.由于某种原因,这让我违反了内存访问. void allocationMatrix(int ***matrix, int row, int col){国际我;if((*matrix = (int**)malloc(row * sizeof(int*))) == NU
..
malloc() 函数是否可重入? 解决方案 我在某处读到,如果您使用 -pthread 进行编译,malloc 将成为线程安全的.我很确定它的实现依赖,因为 malloc 是 ANSI C 而线程不是. 如果我们在谈论 gcc: 编译和链接 -pthread 和malloc() 将是线程安全的,在 x86 上和 AMD64. http://groups.google.c
..