Tag: free

理解指向malloc和free的指针

指针在C中是一个非常棘手的事情。因为很多人很难理解它,所以为了更好地理解我写了下面的代码: #include #include int main(int argc, char *argv[]) { int *p; // pointer -> will be dynamic allocated int *a; // array -> will be dynamic allocated // print before allocate memory (1) printf(“&p: %p\tp: %p\t*p: %d\n”, &p, p, *p); printf(“&a: %p\ta: %p\t*a: %d\n”, &a, a, *a); printf(“\n”); // allocate memory (2) p = (int […]

何时在C中使用可变长度数组,但是在动态分配时?

我在C99中找到了可变长度数组,但看起来它的行为与malloc + free几乎相同。 我找到的实际差异: 太大的arrays处理: unsigned size = 4000000000; int* ptr = malloc(size); // ptr is 0, program doesn’t crash int array[size]; // segmentation fault, program crashes 内存泄漏:只能在动态数组分配中使用: int* ptr = malloc(size); … if(…) return; … free(ptr); 对象的生命和从函数返回的可能性:动态分配的数组生命直到内存被释放,并且可以从分配内存的函数返回。 resize:仅使用指向已分配内存的指针resize。 我的问题是: 有什么更多的差异(我对实用建议感兴趣)? 程序员可以使用两种具有可变长度的数组的方式有什么问题? 何时选择VLA但是在动态arrays分配时? 什么是更快:VLA或malloc +免费?

在C中打印指针地址

我知道我的问题非常简单,但谷歌他们并没有给我任何有用的结果……他们可能太简单了!! 第1名 char* createStr(){ char* str1 = malloc(10 * sizeof(char)); printf(“str1 address in memory : %p\n”, &str1); return str1; } int main(void){ char* str2 = createStr(); printf(“str2 address in memory : %p\n”, &str2); } 结果: str1 address in memory : 0x7fffed611fc8 str2 address in memory : 0x7fffed611fe8 为什么地址不同于createStr()函数以及如何释放(str1)? 第2号 int main(int argc, int *argv[]){ printf(“Basename […]

如何释放仅包含指针的结构

我有一个结构,你在下面看到: typedef struct _List { Person *person; // pointer for people list DoList *do; // Kinda timer, for checking list in some intervals } List; 有没有必要释放这个结构? 如果是这样,我怎么能免费呢?

C中的函数free()对我不起作用

我一直在尝试使用free()通过malloc()分配的malloc() 。 它的一些结构是免费的,但它们保留了一些它们的方式,它们也与它们的孩子保持联系。 它也永远不会释放二进制树的根(gRootPtr) 。 我正在使用Xcode来查明二叉树使用的内存是否已被释放,并使用if语句。 我用来释放内存的代码: void FreeMemory(InfoDefiner *InfoCarrier) { if ((*InfoCarrier) != NULL) { FreeMemory((&(*InfoCarrier)->left)); FreeMemory((&(*InfoCarrier)->right)); free((*InfoCarrier)); } } 代码我用来查看内存是否已被释放。 if (gRootPtr != NULL) { return 1; } else{ return 0; }

Malloc,免费和分段错误

我不明白为什么在这段代码中,对“free”的调用会导致分段错误: #include #include #include char *char_arr_allocator(int length); int main(int argc, char* argv[0]){ char* stringa = NULL; stringa = char_arr_allocator(100); printf(“stringa address: %p\n”, stringa); // same address as “arr” printf(“stringa: %s\n”,stringa); //free(stringa); return 0; } char *char_arr_allocator(int length) { char *arr; arr = malloc(length*sizeof(char)); arr = “xxxxxxx”; printf(“arr address: %p\n”, arr); // same address as “stringa” […]