malloc相关内容

malloc(0) 返回什么?

malloc(0) 返回什么? realloc(malloc(0),0) 的答案是否相同? #include#includeint main(){printf("%p\n", malloc(0));printf("%p\n", realloc(malloc(0), 0));返回0;} Linux GCC 的输出: manav@manav-workstation:~$ gcc -Wall ..
发布时间:2021-12-03 13:35:50 服务器开发

为什么 C++ 需要对 malloc() 进行强制转换,而 C 不需要?

我一直对此很好奇 - 为什么在 C++ 中我必须从 malloc 转换返回值,而不是在 C 中? 以下是 C++ 中有效的示例: int *int_ptr = (int *)malloc(sizeof(int*)); 这是 C++ 中不起作用的示例(无强制转换): int *int_ptr = malloc(sizeof(int*)); 我听说在 C 中,实际上,从 malloc() ..
发布时间:2021-12-02 08:29:28 C/C++开发

为什么 malloc 在 gcc 中将值初始化为 0?

也许平台不同,但是 当我使用 gcc 编译并运行下面的代码时,我在 ubuntu 11.10 中每次都得到 0. #include #include int main(){double *a = (double*) malloc(sizeof(double)*100)printf("%f", *a);} 为什么有 calloc 的 malloc 会这样? 这是否意味着即使有时不希望 ..
发布时间:2021-12-02 08:22:20 服务器开发

malloc(0) 的意义是什么?

我刚看到这个代码: artist = (char *) malloc(0); ...我想知道为什么要这样做? 解决方案 根据规范,malloc(0) 将返回“一个空指针或一个可以成功传递给 free() 的唯一指针". 这基本上可以让你不分配任何东西,但仍然可以放心地将“artist"变量传递给对 free() 的调用.出于实际目的,这与执行几乎相同: artist = NUL ..
发布时间:2021-12-02 08:15:05 其他开发

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

给定 结构节点{一个;结构节点 * 下一个;}; 要 malloc 一个新的结构, struct node *p = malloc(sizeof(*p)); 比 更安全 struct node *p = malloc(sizeof(struct node)); 为什么?我以为他们是一样的. 解决方案 它更安全,因为您不必两次提及类型名称,也不必为“取消引用"构建正确的拼写.类 ..
发布时间:2021-12-02 08:06:35 其他开发

如何从C中的指针获取数组的大小?

我已经分配了一个大小为 n 的 mystruct 的“数组",如下所示: if (NULL == (p = calloc(sizeof(struct mystruct) * n,1))) {/* 处理错误 */} 后来,我只能访问p,不再有n.有没有办法确定仅给定指针 p 的数组的长度? 我认为它必须是可能的,因为 free(p) 就是这样做的.我知道 malloc() 会跟踪它分配了多 ..
发布时间:2021-12-02 08:05:01 其他开发

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

我需要关于 malloc() 在另一个函数中的帮助. 我正在将 指针 和 大小 从我的 main() 传递给函数,我想为该指针分配内存从被调用的函数内部动态使用 malloc() ,但我看到的是......正在分配的内存用于在我的被调用函数中声明的指针而不是指针位于 main() 中. 我应该如何将指针传递给函数并从被调用函数内部为传递的指针分配内存? 我编写了以下代码,得到的输 ..
发布时间:2021-12-02 00:04:46 其他开发

malloc 和 calloc 的区别?

做和做有什么区别: ptr = (char **) malloc (MAXELEMS * sizeof(char *)); 或: ptr = (char **) calloc (MAXELEMS, sizeof(char*)); 什么时候使用 calloc 而不是 malloc 是一个好主意,反之亦然? 解决方案 calloc() 给你一个零初始化的缓冲区,而 malloc() 使 ..
发布时间:2021-12-01 23:57:22 其他开发

为什么 malloc+memset 比 calloc 慢?

众所周知,calloc 与 malloc 的不同之处在于它初始化分配的内存.使用 calloc,内存设置为零.使用malloc,不会清除内存. 所以在日常工作中,我把calloc当成malloc+memset.顺便说一句,为了好玩,我编写了以下代码作为基准测试. 结果令人困惑. 代码 1: #include#include#定义块大小 1024*1024*256int main ..
发布时间:2021-12-01 23:56:56 其他开发

如何在 C 中正确设置、访问和释放多维数组?

关于 C 中的多维数组,我已经看到了许多关于“我的代码有什么问题"的问题.出于某种原因,人们似乎无法理解这里发生的事情,所以我决定回答这个问题作为参考他人: 如何在 C 中正确设置、访问和释放多维数组? 如果其他人有有用的建议,请随时发布! 解决方案 在 C99 之后的 C 中,即使是动态多维数组也可以通过 malloc 一次性轻松分配,并通过 free: double (* ..
发布时间:2021-12-01 23:49:52 其他开发

当您在 malloc 之后不释放时,真正会发生什么?

这件事一直困扰着我多年. 我们在学校都被教导(至少,我是)你必须释放分配的每个指针.不过,我对不释放内存的实际成本有点好奇.在一些明显的情况下,比如当 malloc 在循环内或线程执行的一部分中被调用时,释放非常重要,这样就不会出现内存泄漏.但请考虑以下两个示例: 首先,如果我有这样的代码: int main(){char *a = malloc(1024);/* 用 'a' 做一些 ..
发布时间:2021-12-01 23:49:15 其他开发

动态内存访问仅在函数内部有效

此问题旨在用作此常见问题解答的规范副本: 我在函数内部动态分配数据,一切正常,但仅限于发生分配的函数内部.当我尝试在函数外使用相同的数据时,我会遇到崩溃或其他意外的程序行为. 这是一个MCVE: #include #include void create_array (int* data, int size){数据 = malloc(sizeof(*data) * size);for ..

我是否投射 malloc 的结果?

在这个问题中,有人在评论中建议我应该不转换malloc的结果.即,我应该这样做: int *sieve = malloc(sizeof(int) * length); 而不是: int *sieve = (int *) malloc(sizeof(int) * length); 为什么会这样? 解决方案 TL;DR int *sieve = (int *) malloc(size ..
发布时间:2021-12-01 23:31:56 其他开发

为什么我会遇到 C malloc 断言失败?

我正在实现一个分而治之的多项式算法,因此我可以针对 OpenCL 实现对其进行基准测试,但是我无法让 malloc 工作.当我运行程序时,它会分配一堆东西,检查一些东西,然后将 size/2 发送给算法.然后,当我再次点击 malloc 行时,它会吐出: malloc.c:3096: sSYSMALLOc: Assertion `(old_top == (((mbinptr) (((char * ..
发布时间:2021-11-30 11:31:14 其他开发

Malloc错误“无法分配区域"失败,错误代码 12.知道如何解决这个问题吗?

我收到此错误,不知道该怎么办: AppName(3786,0xa0810540) malloc: *** mmap(size=16777216) failed (error code=12)*** 错误:无法分配区域*** 在 malloc_error_break 中设置断点进行调试 如果我在发生错误的那一行设置了一个断点,我不知道我必须专门搜索什么.在工具中,我检查了分配,并且该值正在增加, ..
发布时间:2021-11-27 08:11:13 移动开发

malloc(0) 真的有效吗?

可能的重复: malloc(0) 有什么意义? 为什么 malloc(0) 实际上返回一个有效的写入指针? char *str = NULL;str = (char*)malloc(0);//分配 0 字节 ?printf("str的指针:%p\n", str);strcpy(str, "一个很长的字符串.......");printf("str的值:%s", str);免费(字符串); ..
发布时间:2021-11-27 08:10:53 其他开发

C/C++ 的多线程内存分配器

我目前有大量多线程的服务器应用程序,我正在四处寻找一个好的多线程内存分配器. 到目前为止,我很纠结: 太阳的乌梅 Google 的 tcmalloc 英特尔的线程构建块分配器 Emery Berger 的宝藏 据我所知,hoard 可能是最快的,但我在今天之前没有听说过它,所以我怀疑它是否真的像看起来一样好.任何人都有尝试这些分配器的个人经验? 解决方案 我使用过 ..
发布时间:2021-11-27 08:09:31 C/C++开发

malloc(sizeof(int)) vs malloc(sizeof(int *)) vs (int *)malloc(sizeof(int))

我承认所有这三个都有不同的含义.但是,我不明白这些适用于哪些特定情况.任何人都可以为每一个分享一个例子吗?谢谢. malloc(sizeof(int))malloc(sizeof(int *))(int *)malloc(sizeof(int)) 解决方案 malloc(sizeof(int)) 意味着您正在分配堆外的空间来存储 int.您保留了 int 所需的字节数.这会返回一个您应该转 ..
发布时间:2021-11-27 08:09:03 其他开发