malloc相关内容

如何为字符串动态分配内存空间并从用户那里获取该字符串?

我想使用 C 程序读取用户的输入.我不想使用数组, 字符名称[50]; 因为如果用户给出长度为10的字符串,那么剩下的空格就浪费了. 如果我使用字符指针, char *names; 然后我需要以这种方式分配内存, names = (char *)malloc(20 * sizeof(char)); 在这种情况下,也有可能会浪费内存. 所以,我需要的是为一个与字符串长度完全相 ..
发布时间:2021-12-24 16:40:34 其他开发

C - 初始化结构数组

我在初始化结构数组时遇到问题.我不确定我是否做得对,因为我得到了“从不兼容的指针类型初始化"&“从不兼容的指针类型赋值".我在代码中添加了这些警告,当我尝试从结构中打印数据时,我只会得到垃圾,例如@@### typedef 结构体{字符*名字;字符*姓氏;国际日;整数月;整数年;}学生; //初始化数组 student** Students = malloc(sizeof(student) ..
发布时间:2021-12-23 17:31:07 其他开发

灵活数组成员不在结构体错误末尾的原因是什么?

我想知道为什么我在调用 malloc 时总是收到 error: flexible array member not at end of struct 错误.我有一个带有可变长度数组的结构,但我不断收到此错误. 结构是, typedef struct {size_t N;双数据[];内部标签[];s_col; 对 malloc 的调用是, col = malloc(sizeof(s_co ..
发布时间:2021-12-23 17:17:26 其他开发

有人可以解释指向指针的指针是如何工作的吗?

我真的不明白指向指针的指针是如何工作的.有没有办法在不使用指针的情况下做同样的工作? 结构客户{字符名称[20];字符姓氏[20];国际代码;浮动资金;};typedef struct customer 客户;无效插入(客户**tmp){*tmp = (客户 *)malloc(sizeof(customer));puts("给我一个客户姓名,姓氏代码和钱");scanf("%s %s %d %f ..
发布时间:2021-12-23 17:09:42 其他开发

内置函数‘malloc’的不兼容隐式声明

我收到此错误: 警告:内置函数‘malloc’的隐式声明不兼容 我正在尝试这样做: fileinfo_list* tempList = malloc(sizeof(fileinfo_list)); 手头使用的结构仅供参考: typedef struct {文件信息**文件数据;size_t nFiles;size_t 大小;size_t 文件块;} 文件信息列表; 我认为我所做 ..
发布时间:2021-12-23 16:55:17 其他开发

使用 strcpy 时打印的垃圾

我有一个函数可以解析一些传入的数据.我的问题是,在使用 strncpy 后,当我尝试打印它时,我得到了一些垃圾.我尝试使用 malloc 使 char 数组具有精确的大小. 代码: void parse_data(char *unparsed_data){字符 *temp_str;字符 * pos;字符 *pos2;字符 * 键;字符*数据;const char 换行符 = '\n';整数 ..
发布时间:2021-12-22 20:12:38 其他开发

VS2003 C++ 中异常的堆大小限制

我有一个使用大量数据的 C++ 应用程序,并且在测试时注意到它的内存不足,但仍有足够的可用内存.我已将代码简化为示例测试用例,如下所示; void MemTest(){size_t 大小 = 500*1024*1024;//512mb如果(大小 > _HEAP_MAXREQ)TRACE("无效尺寸");void * mem = malloc(Size);如果(内存== NULL)TRACE("分 ..
发布时间:2021-12-22 18:52:41 C/C++开发

在函数中分配多维数组

我正在尝试在 C 程序中分配一个二维数组.它在这样的主要功能中工作正常(如 这里): #include #include int main(int argc, char ** argv){int ** 网格;int i, nrows=10, ncols=10;grid = malloc(sizeof(int *) * nrows);如果(网格== NULL){printf("错误:内存不足\n" ..
发布时间:2021-12-21 13:13:38 其他开发

C 编程:用于二维数组的 malloc()(使用指针到指针)

昨天我发布了一个问题:我应该如何传递一个指向函数的指针以及从被调用函数内部为传递的指针分配内存? 从我得到的答案中,我能够理解我犯了什么错误. 我现在面临一个新问题,有人可以帮忙吗? 我想动态分配一个二维数组,所以我将一个指针到指针从我的 main() 传递给另一个名为 alloc_2D_pixels(...) 的函数code>,我使用 malloc(...) 和 for(... ..
发布时间:2021-12-21 13:11:00 其他开发

在 C 中为二维数组分配内存的最佳方法?

在C中为二维数组分配内存的最佳方法是什么,从两个角度来看:memory-management和速度 ? 另外,二维数组(并为其分配内存)或双指针哪个更好用?有人能详细解释一下,里面发生了什么,为什么一种方法比另一种更好? 解决方案 为了获得最佳性能和最佳可读性,此类数组应始终分配为连续的内存块: type (*array) [X][Y] = malloc( sizeof(type[ ..
发布时间:2021-12-21 13:01:51 其他开发

堆分配一个二维数组(不是指针数组)

我正在编写 C 代码,我想在堆上分配 512*256 字节.为了我自己的方便,我希望能够使用语法 array[a][b]; 访问元素.没有算法来找到正确的索引. 我在网上看到的每个教程都告诉我创建一个指针数组,这些指针指向数组中我想要的行数组.这意味着每个子数组都需要单独进行 malloc 和 free .我对只需要调用一次 malloc 和调用一次 free 的解决方案感兴趣.(因此所有元 ..
发布时间:2021-12-21 12:54:13 其他开发

调用 free() 后内存未释放

我有一个小程序,它通过向链表添加节点来生成链表,然后释放链表分配的内存. Valgrind 不报告任何内存泄漏错误,但进程继续持有分配的内存. 我只能在将分配的内存从 sizeof(structure_name) 更改为固定数字 512 后才能修复错误.(请参阅注释代码) 这是错误还是正常操作?代码如下: #include #include #include typedef s ..
发布时间:2021-12-21 10:21:15 其他开发

如何在内存中的特定位置存储值?

也许这是一个简单的问题,但我真的很想知道. 如果我想在内存中的特定地址(在堆中)存储一个值,比如一个 int,我该怎么做? 比如说,我想将 int 值 10 存储在 0x16 处.我想通过调用 new 或 malloc 来实现: int *p=new int(10);然后我想将存储值的地址设置为 0x16.起初我以为只是像 &p=0x16 这样的东西,但这行不通.我需要这样做以在内存中 ..
发布时间:2021-12-21 10:19:29 C/C++开发

你能在 c 或 c++ 中分配一个非常大的单个内存块(> 4GB)吗?

这些天我想知道有非常大量的内存,是否可以分配大于 4GB 的单个内存块?或者我是否需要分配一堆较小的块并处理它们之间的切换? 为什么???我正在处理一些 openstreetmap xml 数据,这些文件很大.我目前正在流式传输它们,因为我无法将它们全部加载到一个块中,但我只是对 malloc 或 new 的上限感到好奇. 解决方案 简短回答:不太可能 为了使其工作,您绝对必须 ..
发布时间:2021-12-21 10:16:36 C/C++开发

为什么我不应该对不是由 malloc() 分配的变量调用 free()?

我在某处读到使用 free 来删除不是通过调用 malloc 创建的对象是灾难性的,这是真的吗?为什么? 解决方案 这是未定义的行为 - 切勿尝试. 让我们看看当您尝试 free() 一个自动变量时会发生什么.堆管理器必须推断如何获得内存块的所有权.为此,它要么必须使用一些单独的结构来列出所有已分配的块并且非常慢且很少使用,要么希望必要的数据位于块的开头附近. 后者经常使用,这 ..
发布时间:2021-12-21 10:12:54 其他开发

Malloc 与自定义分配器:Malloc 有很多开销.为什么?

我有一个图像压缩应用程序,它现在有两个不同版本的内存分配系统.在最初的版本中,malloc 无处不在,在第二个版本中,我实现了一个简单的池分配器,它只分配内存块并将部分内存返回给 myalloc() 调用. 当使用 malloc 时,我们已经注意到巨大的内存开销:在其内存使用量达到高峰时,malloc() 代码需要大约 170 兆字节的内存来处理 1920x1080x16bpp 的图像,而池 ..
发布时间:2021-12-21 10:06:40 其他开发