Questions tagged «malloc»

malloc函数在C语言中执行动态内存分配,并且是标准库的一部分。使用此标签可查询有关malloc的用法,行为和实现的问题。

2
在C ++ 20之前将malloc用于int未定义行为
有人告诉我,以下代码在C ++ 20之前具有未定义的行为: int *p = (int*)malloc(sizeof(int)); *p = 10; 真的吗? 该论点是int对象的生存期在分配值之前没有开始(P0593R6)。若要解决此问题,new应使用放置: int *p = (int*)malloc(sizeof(int)); new (p) int; *p = 10; 我们真的必须调用一个琐碎的默认构造函数来启动对象的生存期吗? 同时,该代码在纯C语言中没有未定义的行为。但是,如果我int在C代码中分配一个并在C ++代码中使用它会怎样? // C source code: int *alloc_int(void) { int *p = (int*)malloc(sizeof(int)); *p = 10; return p; } // C++ source code: extern "C" int *alloc_int(void); …

8
为什么会出现C malloc断言失败?
我正在实现分而治之多项式算法,因此可以将其对照OpenCL实现进行基准测试,但无法malloc正常工作。当我运行程序时,它会分配一堆东西,检查一些东西,然后将其发送size/2给算法。然后,当我malloc再次点击该行时,它会吐出以下内容: malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end …
85 c  gcc  malloc  assertion 

12
为什么C中的`free`不占用要释放的字节数?
明确一点:我确实知道malloc并free在C库中实现,该库通常从OS分配内存块,并进行自己的管理以将较小的内存分配给应用程序,并跟踪分配的字节数。这个问题不是免费如何知道多少免费。 相反,我想知道为什么free首先要采用这种方式。作为一种低级语言,我认为要求C程序员不仅跟踪分配了什么内存而且跟踪多少内存是完全合理的(实际上,我通常发现我最终跟踪了字节数)仍然分配)。在我看来,明确给出字节数free可能会允许某些性能优化,例如,具有针对不同分配大小的单独池的分配器将能够通过查看输入参数来确定要释放哪个池,并且总体而言,空间开销会更少。 因此,简而言之,为什么要创建malloc和free创建它们以使它们在内部跟踪分配的字节数?这只是历史性的意外吗? 一个小的修改:一些人提供了一些要点,例如“如果您释放的金额与分配的金额不同,将会怎样?” 我想象中的API可能只需要一个就可以准确释放分配的字节数。释放或多或少可以简单地由UB或实现定义。不过,我不想阻止关于其他可能性的讨论。

13
如何找到导致malloc“双重释放”错误的原因?
我正在使用Objective-C编写应用程序,但出现此错误: MyApp(2121,0xb0185000)malloc:***对象0x1068310的错误:double free ***在malloc_error_break中设置一个断点以进行调试 当我释放NSAutoreleasePool时,就发生了这种情况,但是我无法弄清楚我要两次释放哪个对象。 我如何设置他的断点? 有没有办法知道什么是“对象0x1068310”?

9
为什么malloc在gcc中将值初始化为0?
平台之间可能有所不同,但是 当我使用gcc编译并运行下面的代码时,每次在ubuntu 11.10中获得0。 #include <stdio.h> #include <stdlib.h> int main() { double *a = (double*) malloc(sizeof(double)*100) printf("%f", *a); } 为什么即使有calloc,malloc的行为也是如此? 难道就意味着即使您不希望有时将值初始化为0,也会有不必要的性能开销吗? 编辑:哦,我以前的示例不是initiazling,而是碰巧使用“新鲜”块。 我恰好在寻找的是为什么它在分配一个大块时将其初始化: int main() { int *a = (int*) malloc(sizeof(int)*200000); a[10] = 3; printf("%d", *(a+10)); free(a); a = (double*) malloc(sizeof(double)*200000); printf("%d", *(a+10)); } OUTPUT: 3 0 (initialized) 但是感谢您指出在分配时有一个安全原因!(从未考虑过)。确保在分配新鲜块或大块时必须将其初始化为零。
77 c  linux  gcc  malloc 

4
jemalloc如何工作?有什么好处?
Firefox 3附带了一个新的分配器:jemalloc。 我在很多地方都听说过这种新的分配器更好。Google的最佳搜索结果没有提供任何进一步的信息,我对它的工作原理很感兴趣。
77 firefox  malloc 

6
malloc是否在Linux(和其他平台)上懒惰地为分配创建后备页面?
在Linux上,如果我愿意malloc(1024 * 1024 * 1024),malloc实际做什么? 我确定它会为分配分配一个虚拟地址(通过遍历空闲列表并在必要时创建一个新的映射),但实际上是否创建了1 GiB的交换页?还是mprotect当您真正触摸它们时就创建地址范围并创建页面mmap? (我之所以指定Linux,是因为该标准在这些细节上没有提及,但是我想知道其他平台也可以这样做。)
75 linux  malloc 


9
数组类型与使用malloc分配的数组之间的区别
今天,我用一些C代码帮助了我的一个朋友,但我发现了一些奇怪的行为,无法解释他为什么会这样。我们有一个TSV文件,其中包含一个整数列表,int每行一行。第一行是列表中的行数。 我们也有一个带有非常简单的“ readfile”的ac文件。第一行被读取为n,即行数,然后进行了以下初始化: int list[n] 最后一个为环n带fscanf。 对于小n(直到〜100.000),一切都很好。但是,我们发现,当n大(10 ^ 6)时,将发生段错误。 最后,我们将列表初始化更改为 int *list = malloc(n*sizeof(int)) 一切都很好,即使很大n。 有人可以解释为什么会这样吗?是什么引起的段错误int list[n],在我们开始使用时已停止list = malloc(n*sizeof(int))?

9
C编程:另一个函数内的malloc()
我需要malloc() 其他功能的帮助。 我正在从我的函数传递一个指针和一个大小给函数main(),我想malloc()从被调用的函数内部使用该指针动态分配内存,但是我看到的是...正在分配的内存是用于在我的调用函数中声明的指针,而不用于main()。 我该如何传递指向函数的指针并从被调用函数内部为传递的指针分配内存? 我编写了以下代码,并得到如下所示的输出。 资源: int main() { unsigned char *input_image; unsigned int bmp_image_size = 262144; if(alloc_pixels(input_image, bmp_image_size)==NULL) printf("\nPoint2: Memory allocated: %d bytes",_msize(input_image)); else printf("\nPoint3: Memory not allocated"); return 0; } signed char alloc_pixels(unsigned char *ptr, unsigned int size) { signed char status = NO_ERROR; ptr = NULL; ptr …
69 c  function  pointers  malloc 

8
使用malloc分配具有不同行长的多维数组
我有以下C代码: int *a; size_t size = 2000*sizeof(int); a = (int *) malloc(size); 效果很好。但是如果我有以下内容: char **b = malloc(2000*sizeof *b); 其中的每个元素b都有不同的长度。 怎么可能做b和我一样的事情a;即下面的代码将保持正确? char *c; size_t size = 2000*sizeof(char *); c = (char *) malloc(size);
68 c  arrays  malloc 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.