众所周知, 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 […]
我看到在C + +有多种方式来分配和释放数据,我明白,当你打电话给malloc你应该free打电话,当你使用new运营商,你应该与delete配对,这是一个错误混合两者(例如free()呼叫free()用new运算符创build的东西),但我不清楚什么时候应该使用malloc / free ,何时使用new / delete在我的真实世界程序中。 如果您是C ++专家,请告诉我您在这方面遵循的任何规则或惯例。
我想知道如何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; } 如果答案是在记忆层面,如果可能的话,我会很感激。
我已经看到了关于C中multidimensional array的问题“我的代码出了什么问题”的几十个问题。由于某些原因,人们似乎无法把头在这里发生的事情,所以我决定回答这个问题,作为对其他人的参考: 如何正确设置,访问和释放C中的multidimensional array? 如果别人有帮助的build议,请随时张贴!
使用下面的代码: char *name = malloc(sizeof(char) + 256); printf("What is your name? "); scanf("%s", name); printf("Hello %s. Nice to meet you.\n", name); 用户可以input他们的名字,但是当他们input一个像Lucas Aardvark这样的空间的名字时, scanf()只会截断Lucas之后的所有内容。 我如何使scanf()允许空格
在这个问题中 ,有人在评论中提出,我不应该把malloc的结果,即 int *sieve = malloc(sizeof(int) * length); 而不是: int *sieve = (int *) malloc(sizeof(int) * length); 为什么会这样呢?
做什么有什么区别: ptr = (char **) malloc (MAXELEMS * sizeof(char *)); 要么: ptr = (char **) calloc (MAXELEMS, sizeof(char*)); 什么时候使用calloc over malloc是一个好主意,反之亦然?