2775得票29回答
我应该将malloc的结果转换成什么类型?

在这个问题中,有人在评论中建议我不要对malloc的结果进行强制转换。也就是说,我应该这样做: int *sieve = malloc(sizeof(*sieve) * length); 而不是: int *sieve = (int *) malloc(sizeof(*sieve) *...

942得票14回答
malloc和calloc有什么不同?

做以下两种操作有何区别:ptr = malloc(MAXELEMS * sizeof(char *)); 并且:ptr = calloc(MAXELEMS, sizeof(char*)); 何时使用calloc比malloc更好,反之亦然?

654得票20回答
当程序终止前没有释放malloc分配的内存,会发生什么?

我们都被教导必须释放每个分配的指针。然而我有点好奇,如果不释放内存会有什么实际代价。在一些明显的情况下,比如在循环或线程执行的一部分中调用 malloc() 时,释放内存非常重要以避免内存泄漏。但是考虑以下两个示例: 首先,如果我的代码类似于这样:int main() { char...

595得票20回答
何时使用malloc和/或new?

C++有多种分配和释放数据的方式。我知道使用malloc时应该用free来释放内存,而使用new操作符时应该与delete搭配使用。如果混合使用这两种方法(例如调用free()释放由new操作符创建的对象),那么将是一个错误。但是在实际编程中,我不清楚什么情况下应该使用malloc/free以...

495得票24回答
为什么使用alloca()不被视为良好的实践?

alloca()函数在栈上分配内存,而不是像malloc()一样在堆上分配内存。 因此,当我从函数返回时,内存就被释放了。 因此,实际上这解决了我释放动态分配内存的问题。 通过malloc()分配内存后释放内存是一个大问题,如果某些情况下没有释放会导致各种内存问题。 尽管具有上述功能,为什么...

318得票13回答
malloc()和free()是如何工作的?

我想了解 malloc 和 free 如何工作。int main() { unsigned char *p = (unsigned char*)malloc(4*sizeof(unsigned char)); memset(p,0,4); strcpy((char*)p...

297得票3回答
为什么malloc + memset比calloc慢?

众所周知,calloc与malloc的区别在于前者会初始化分配的内存空间。使用calloc时,内存会被设置为零;而使用malloc时,内存不会被清空。 因此,我在日常工作中将calloc视为malloc+memset。 顺便一提,我编写了以下代码来进行基准测试。 结果很令人困惑。 代码1...

248得票8回答
什么是内存堆?

什么是内存堆(heap)?

195得票23回答
释放后将变量设置为NULL

在我的公司有一条编码规则,即在释放任何内存后,将变量重置为NULL。例如...void some_func () { int *nPtr; nPtr = malloc (100); free (nPtr); nPtr = NULL; return...

179得票5回答
内置函数“malloc”的隐式声明不兼容

我遇到了这个错误: 警告:内置函数‘malloc’的不兼容隐式声明 我正在尝试做这件事:fileinfo_list* tempList = malloc(sizeof(fileinfo_list)); 仅供参考,此处使用的结构体如下:typedef struct { fil...