Tag: malloc

空闲后将variables设置为NULL

在我的公司有一个编码规则,说释放任何内存后,将该variables重置为NULL。 例如 … void some_func () { int *nPtr; nPtr = malloc (100); free (nPtr); nPtr = NULL; return; } 我觉得,在像上面显示的代码的情况下,设置为NULL没有任何意义。 还是我错过了什么? 如果在这种情况下没有意义的话,我会去接受“质量小组”去除这个编码规则。 请指教。

为什么C ++需要一个malloc()强制转换,但C不?

我一直对此感到好奇 – 为什么在C ++中我必须从malloc投入返回值,但不是在C中? 以下是C ++中的示例: int *int_ptr = (int *)malloc(sizeof(int*)); 这里是C + +的例子,不工作(不投): int *int_ptr = malloc(sizeof(int*)); 我听说在C中,实际上,从malloc()输出一个输出是一个错误。 任何人都可以评论这个话题吗?

free和malloc如何在C中工作?

我试图找出如果我试图释放一个“从中间”的指针会发生什么,例如,看看下面的代码: char *ptr = (char*)malloc(10*sizeof(char)); for (char i=0 ; i<10 ; ++i) { ptr[i] = i+10; } ++ptr; ++ptr; ++ptr; ++ptr; free(ptr); 我得到一个未处理的exception错误信息的崩溃。 我想知道为什么和如何自由工作,以便我不仅知道如何使用它,而且能够理解奇怪的错误和exception,并更好地debugging我的代码 非常感谢

为什么在malloc中使用sizeof(*指针)更安全

特定 struct node { int a; struct node * next; }; 为了build立一个新的结构, struct node *p = malloc(sizeof(*p)); 比…更安全 struct node *p = malloc(sizeof(struct node)); 为什么? 我以为他们是一样的。

使用malloc分配不同行长度的multidimensional array

我有以下的C代码: int *a; size_t size = 2000*sizeof(int); a = (int *) malloc(size); 这工作正常。 但是,如果我有以下几点: char **b = malloc(2000*sizeof *b); b每个元素都有不同的长度。 如何为b做同样的事情,就像我为b做的一样; 即下面的代码将保持正确? char *c; size_t size = 2000*sizeof(char *); c = (char *) malloc(size);

dynamic内存访问只在函数内部起作用

此问题旨在用作此常见问题的规范副本: 我在一个函数内dynamic分配数据,一切正常,但只在分配发生的函数内。 当我尝试在函数外部使用相同的数据时,出现崩溃或其他意外的程序行为。 这是一个MCVE: #include <stdlib.h> #include <stdio.h> void print_array (int* data, int size) { for(int i=0; i<size; i++) { printf("%d ", data[i]); } printf("\n"); } void create_array (int* data, int size) { data = malloc(sizeof(*data) * size); for(int i=0; i<size; i++) { data[i] = i; } print_array(data, size); } int main (void) { int* […]

我怎样才能从C中的指针获取数组的大小?

我已经分配了一个大小为n的mystruct的“数组”: if (NULL == (p = calloc(sizeof(struct mystruct) * n,1))) { /* handle error */ } 之后,我只能访问p ,不再有n 。 有没有一种方法来确定只给了指针p数组的长度? 我认为这一定是可能的,因为free(p)就是这样做的。 我知道malloc()跟踪它已经分配了多less内存,这就是为什么它知道长度; 也许有一种方法来查询这些信息? 就像是… int length = askMallocLibraryHowMuchMemoryWasAlloced(p) / sizeof(mystruct) 我知道我应该修改代码,以便知道n ,但是如果可能,我宁愿不要。 有任何想法吗?

C编程:另一个函数中的malloc()

我需要另一个函数内的 malloc()帮助。 我从我的main()传递一个指针和大小的函数,我想分配内存为该指针dynamic使用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 = (unsigned char*)malloc(size); if(ptr== NULL) […]

当你在malloc之后没有自由时真的会发生什么?

这已经困扰了我很多年了。 我们都在学校教书(至less,我是),你必须释放每一个分配的指针。 不过,对于没有释放内存的真正代价,我有些好奇。 在一些明显的情况下,例如malloc在循环或线程执行的一部分中被调用时,释放非常重要,所以没有内存泄漏。 但是请考虑以下两个示例: 首先,如果我有这样的代码: int main() { char *a = malloc(1024); /* Do some arbitrary stuff with 'a' (no alloc functions) */ return 0; } 这里真正的结果是什么? 我的想法是,这个过程死了,然后堆空间已经消失了,所以没有任何伤害,错过了free的呼吁(但是,我确实认识到无论如何,closures,可维护性和良好的做法的重要性)。 我对这个想法是否正确? 其次,让我们说我有一个程序,有点像一个壳。 用户可以声明像aaa = 123这样的variables,并将这些variables存储在某些dynamic数据结构中供以后使用。 很显然,你会使用一些解决scheme来调用一些* alloc函数(hashmap,链表,类似的东西)。 对于这种types的程序,在调用malloc之后永远不会释放,因为这些variables必须在程序执行期间一直存在,并且没有什么好的方法(我可以看到)使用静态分配的空间来实现这一点。 有一堆分配的内存,但只作为过程结束的一部分被释放,这是不好的devise吗? 如果是的话,还有什么select?

为什么使用alloca()不被认为是好的做法?

alloca()从堆栈分配内存,而不是malloc()堆。 所以,当我从例程返回时,内存被释放。 所以,这实际上解决了我释放dynamic分配内存的问题。 释放通过malloc()分配的内存是一个非常头疼的问题,如果不知何故,会导致各种内存问题。 为什么使用alloca() ,尽pipe有上述的特性,