Questions tagged «malloc»

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

28
我要转换malloc的结果吗?
在这个问题,有人建议意见,我应该不会投的结果malloc,即 int *sieve = malloc(sizeof(int) * length); 而不是: int *sieve = (int *) malloc(sizeof(int) * length); 为什么会这样呢?
2406 c  malloc  casting 

13
malloc和calloc之间的区别?
两者之间有什么区别: ptr = (char **) malloc (MAXELEMS * sizeof(char *)); 要么: ptr = (char **) calloc (MAXELEMS, sizeof(char*)); 什么时候在malloc上使用calloc是个好主意,反之亦然?
779 c  malloc  calloc 

17
当您在malloc之后不释放时,真正发生了什么?
多年来,这一直困扰着我。 我们都在学校里受教(至少在我以前是这样),您必须释放分配的每个指针。但是,对于不释放内存的实际成本,我有点好奇。在某些明显的情况下,例如在malloc循环或线程执行的一部分内调用when时,释放非常重要,这样就不会发生内存泄漏。但是,请考虑以下两个示例: 首先,如果我有这样的代码: int main() { char *a = malloc(1024); /* Do some arbitrary stuff with 'a' (no alloc functions) */ return 0; } 真正的结果是什么?我的想法是该过程终止,然后无论如何堆空间都消失了,因此错过该调用不会有任何危害free(但是,我的确意识到无论如何对于关闭,可维护性和良好实践而言,保持它的重要性)。我的想法对吗? 其次,假设我有一个程序有点像shell。用户可以声明类似的变量,aaa = 123并将这些变量存储在某种动态数据结构中以备后用。显然,显然您会使用一些可调用* alloc函数的解决方案(哈希映射,链接列表等)。对于这种程序,调用后永远释放是没有意义的,malloc因为这些变量必须在程序执行期间始终存在,并且没有很好的方法(我可以看到)用静态分配的空间来实现。分配一堆但仅在进程结束时释放的内存是不好的设计吗?如果是这样,还有什么选择?
538 c  malloc  free 

19
我在什么情况下使用malloc和/或new?
我看到在C ++中有多种分配和释放数据的方法,而且我了解,当您调用malloc时应调用,free并且在使用new运算符时应与之配对,delete将两者混合使用是错误的(例如,调用free()已创建的内容)与new操作员联系),但我不清楚在实际程序中何时应使用malloc/ free以及何时应使用new/ delete。 如果您是C ++专家,请让我知道您在这方面遵循的经验法则或惯例。

25
为什么不将alloca()用作良好实践?
alloca()在的情况下,在栈而不是堆上分配内存malloc()。因此,当我从例程返回时,内存被释放。因此,实际上这解决了我释放动态分配的内存的问题。释放通过分配的内存malloc()是一个头疼的大问题,如果以某种方式错过,则会导致各种内存问题。 alloca()尽管有上述功能,为什么不鼓励使用?
400 c  stack  malloc  allocation  alloca 

13
malloc()和free()如何工作?
我想知道如何malloc和free工作。 int main() { unsigned char *p = (unsigned char*)malloc(4*sizeof(unsigned char)); memset(p,0,4); strcpy((char*)p,"abcdabcd"); // **deliberately storing 8bytes** cout << p; free(p); // Obvious Crash, but I need how it works and why crash. cout << p; return 0; } 如果可能的话,我很感激如果答案在内存级别。

3
为什么malloc + memset比calloc慢?
众所周知,这与初始化分配的内存calloc不同malloc。使用calloc,将内存设置为零。使用malloc,不会清除内存。 因此,在日常工作中,我将其calloc视为malloc+ memset。顺便说一句,为了娱乐,我为基准测试编写了以下代码。 结果令人困惑。 代码1: #include<stdio.h> #include<stdlib.h> #define BLOCK_SIZE 1024*1024*256 int main() { int i=0; char *buf[10]; while(i<10) { buf[i] = (char*)calloc(1,BLOCK_SIZE); i++; } } 代码1的输出: time ./a.out **real 0m0.287s** user 0m0.095s sys 0m0.192s 代码2: #include<stdio.h> #include<stdlib.h> #include<string.h> #define BLOCK_SIZE 1024*1024*256 int main() { int i=0; char *buf[10]; while(i<10) { …
256 c  malloc 


1
为什么“ The C Programming Language”这本书说我必须转换malloc?
今天,我到达了C编程语言(第二版Brian W. Kernighan和Dennis M. Ritchie)的第167页,发现作者说我必须强制转换。这是本书的一部分:malloc 7.8.5存储管理 函数malloc和calloc动态获取内存块。 void *malloc(size_t n) 返回一个指向n字节未初始化存储的指针,如果无法满足请求,则返回NULL。 void *calloc(size_t n, size_t size) 返回一个指向足够的可用空间的指针,该指针用于指定大小的n个对象的数组;如果无法满足请求,则返回NULL。存储初始化为零。由malloc或calloc返回的指针与所讨论的对象具有正确的对齐方式,但必须将其强制转换为适当的类型,如 int *ip; ip = (int *) calloc(n, sizeof(int)); 我已经知道malloc(及其家族)返回类型void *,并且有很好的解释为什么不强制转换malloc。 但是我的问题是:为什么这本书说我应该抛弃它?

23
释放后将变量设置为NULL
在我公司中,有一条编码规则说,释放所有内存后,将变量重置为NULL。例如 ... void some_func () { int *nPtr; nPtr = malloc (100); free (nPtr); nPtr = NULL; return; } 我觉得,在如上所示代码的情况下,设置为NULL没有任何意义。还是我错过了什么? 如果在这种情况下没有意义,我将与“质量团队”一起解决,以删除此编码规则。请指教。

5
内置函数'malloc'的不兼容隐式声明
我收到此错误: 警告:内置函数“ malloc”的隐式声明不兼容 我正在尝试这样做: fileinfo_list* tempList = malloc(sizeof(fileinfo_list)); 仅供参考,手头使用的结构是: typedef struct { fileinfo** filedata; size_t nFiles; size_t size; size_t fileblock; } fileinfo_list; 我认为自己所做的没有任何问题。我只是创建一个tempList1 x的大小fileinfo_list。
155 c  struct  malloc 



3
分配二维数组的怪异方法?
在一个项目中,有人推这条线: double (*e)[n+1] = malloc((n+1) * sizeof(*e)); 据推测会创建一个(n + 1)*(n + 1)个double的二维数组。 按说,我说,因为到目前为止,没有人问我能告诉我这是什么呢,正好,也不在那里它源自或者为什么它应该工作(据称,这样做,但我还没有买的话)。 也许我缺少明显的东西,但是如果有人可以向我解释以上内容,我将不胜感激。因为就我个人而言,如果我们使用实际理解的东西会感觉好很多。

8
Malloc与新版-不同的填充
我正在审查使用MPI进行高性能计算(10 ^ 5-10 ^ 6内核)的项目的其他人的C ++代码。该代码旨在允许(可能)不同体系结构上的不同机器之间进行通信。他写了一条评论,内容大致如下: 我们通常使用new和delete,但是在这里我使用malloc和free。这是必要的,因为某些编译器在new使用时会以不同的方式填充数据,从而导致在不同平台之间传输数据时出错。不会发生这种情况malloc。 这与我从标准newvs malloc问题中了解到的任何内容都不符。 new / delete和malloc / free有什么区别?这暗示了编译器可以对对象的大小进行不同的计算(但是,为什么这与使用sizeof?有所不同)。 malloc和placement new vs. new是一个相当受欢迎的问题,但仅涉及new在malloc不使用构造函数的情况下的使用,与此无关。 malloc如何理解对齐方式?说,保证内存可以正确地与任一new或malloc这是我以前认为的。 我的猜测是,他在过去的某个时候误诊了自己的错误,并推断出该错误new并malloc进行了不同程度的填充,我认为这可能是不正确的。但我找不到Google或其他任何问题的答案。 帮我,StackOverflow,您是我唯一的希望!

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.