realloc相关内容

将 realloc() 返回的地址分配给同一个指针是一种好的编码习惯吗?

我在一些网站上看到了一些与 realloc() 相关的代码,如下所示. int *p = (int *)malloc(sizeof(int) * 10);p = (int *)realloc(p, 100); 但正如标准所说,如果 realloc 失败,原始块保持不变并返回 NULL. 所以如果 realloc 失败,从上面的例子中,我们将失去释放 p 的能力.谁能告诉我将 reallo ..
发布时间:2022-01-19 14:54:07 其他开发

realloc() 的正确使用

来自 man realloc:realloc() 函数返回一个指向新分配内存的指针,该指针适合任何类型的变量对齐,可能 与 ptr 不同,如果请求失败,则为 NULL. 所以在这个代码片段中: ptr = (int *) malloc(sizeof(int));ptr1 = (int *) realloc(ptr, count * sizeof(int));if(ptr1 == NULL) ..
发布时间:2021-12-30 23:38:09 其他开发

使用 realloc (X, 0) 而不是 free() 并使用长度为 +1 的字符串 malloc

所以这次我真的不知道如何放置标题.首先,我想说的是,如果问题与“家庭作业"有关,我在此页面上看到了几条关于警告的评论.我的是,但它也完成了,我只是想进一步了解代码的情况. 我也读过一段时间的帖子和书籍,但我觉得我仍然缺少一些东西. 在我使用的代码中有两行代码我不太明白.这项工作是关于获取用作参数的任何文件(如果它是 0 个文件,则从 stdin 读取),并将其向后打印在标准输出上.所有 ..
发布时间:2021-12-24 17:13:57 其他开发

是真的吗,现代操作系统在调用 realloc 时可能会跳过复制

在阅读 https://stackoverflow.com/a/3190489/196561 时,我有一个问题.Qt 作者在Qt 4 容器内中说: ... QVector 使用 realloc() 以 4096 字节的增量增长.这是有道理的,因为现代操作系统在重新分配缓冲区时不会复制整个数据;物理内存页只是简单地重新排序,只需要复制第一页和最后一页的数据. 我的问题是: 1) 现 ..
发布时间:2021-12-24 17:12:21 其他开发

使用 realloc 安全吗?

前段时间我的一个朋友告诉我不要使用 realloc 因为它不安全,但他不能告诉我为什么,所以我对这个主题和最近的参考我的怀疑是: 首先 第二 我想知道我是否可以继续在我的代码中使用 realloc 或者它是否不安全有没有其他方法可以重新分配内存? 解决方案 这两篇链接文章中的第一篇提出了两个投诉,超出了此处已经提出的“检查呼叫成功"要点. 完成后,旧内容将被丢弃并留在内 ..
发布时间:2021-12-24 17:06:09 其他开发

realloc 和 memcpy 如何工作?

我有两个问题. 做 realloc() 和 memcpy() 将数组中的条目复制到另一个数组中的方式比仅迭代每个元素要快 O(N) ?如果答案是肯定的,那么您认为它的复杂性如何? 如果分配的大小小于原始大小,realloc() 是将条目复制到其他地方,还是只保留它们,因为它们正在减小数组的大小?p> 解决方案 1 - 不.他们一次复制一个块.请参阅 http://www.emb ..
发布时间:2021-12-24 16:58:33 其他开发

使用 realloc 缩小分配的内存

关于C中realloc函数的简单问题:如果我使用 realloc 来缩小指针指向的内存块,是否会释放“额外"内存?还是需要手动释放? 例如,如果我这样做 int *myPointer = malloc(100*sizeof(int));myPointer = realloc(myPointer,50*sizeof(int));免费(我的指针); 我会出现内存泄漏吗? 解决方案 不 ..
发布时间:2021-12-24 16:58:03 其他开发

为什么 C++ 分配器中没有重新分配功能?

在 C 中,标准的内存处理函数是 malloc()、realloc() 和 free().然而,C++ stdlib 分配器只并行其中两个:没有重新分配函数.当然,不可能与 realloc() 完全相同,因为简单地复制内存不适用于非聚合类型.但是,比如说,这个函数会不会有问题: bool relocate (pointer ptr, size_type num_now, size_type nu ..
发布时间:2021-12-24 16:53:03 C/C++开发

如何在C中读取无限字符

如何在不指定大小的情况下将无限个字符读入 char* 变量? 例如,假设我想读取也可能需要多行的员工的地址. 解决方案 您必须先“猜测"您期望的大小,然后使用 malloc 分配一个那么大的缓冲区.如果结果太小,您可以使用 realloc 将缓冲区的大小调整为更大一些.示例代码: char *buffer;size_t num_read;size_t 缓冲区大小;缓冲区大小 = 1 ..
发布时间:2021-12-21 18:03:50 其他开发

增加容量时 std::vector *必须* 移动对象吗?或者,分配器可以“重新分配"吗?

A 不同的问题激发了以下想法: std::vector 是否必须在增加容量时移动所有元素? 据我所知,标准行为是底层分配器请求整个新大小的块,然后移动所有旧元素,然后销毁旧元素,然后释放旧内存. 鉴于标准分配器接口,这种行为似乎是唯一可能的正确解决方案.但我想知道,修改分配器以提供一个 reallocate(std::size_t) 函数是否有意义,该函数将返回一个 pair 并 ..
发布时间:2021-12-21 13:24:25 C/C++开发

由于内存而失败时如何处理realloc?

问题说明了一切,但这里有一个例子: typedef struct mutable_t{整数计数,最大值;无效**数据;} mutable_t;void pushMutable(mutable_t *m, void *object){if(m->count == m->max){m->max *= 2;m->data = realloc(m->data, m->max * sizeof(void* ..
发布时间:2021-12-21 09:58:35 其他开发

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中正确重新分配二维数组?

我正在尝试将输入中的两个双精度数加载到一个二维数组中,该数组由每个用户输入动态重新分配. #include #include int main(int argc, char** argv) {整数计数;双数 1, 数 2, **数;while (scanf(“%lf,%lf", number1, number2) != EOF) {计数++;numbers = (double **) reall ..
发布时间:2021-11-18 05:00:02 其他开发

C 中的动态数组——我对 malloc 和 realloc 的理解正确吗?

我正在学习如何在 C 中创建动态一维数组.下面的代码尝试执行以下操作: 使用 malloc,创建一个长度为 10 的动态数组,其中包含 double 类型的值. 将数组的每个条目设置为 j/100,因为 j = 0, 1,..., 9.然后打印出来. 使用 realloc 在数组末尾添加一个额外的空条目. 将新条目设置为 j/100 并再次打印出每个条目. 测试: doubl ..
发布时间:2021-11-18 04:50:08 其他开发

realloc(): 无效的下一个大小 - realloc 动态结构

我开始学习 C 中的结构体.今天我发现了一个我无法解决的问题.我有这个代码: typedef struct fraze{字符 *mostSearch = NULL;//来自用户的字符串双频;s_FRAZE;int readFraze(){int i = 2, k;size_t len = 0;字符 c;s_FRAZE *s;s = (s_FRAZE *)malloc( i * sizeof( i ..
发布时间:2021-08-31 19:16:00 其他开发

realloc(): 无效的下一个大小(核心转储)

我有一个简单的函数,每次我想添加一个字符时都会重新分配缓冲区,它一直工作到我想第 24 次重新分配.然后 realloc(): invalid next size 出现.代码如下: char * addDataChunk(char * data,char c){字符 * p;如果(数据==NULL){数据=(字符*)malloc(大小(字符)* 2);数据[0]=c;数据[1]='\0';返回数 ..
发布时间:2021-07-05 18:46:49 其他开发

Realloc 将指针设置为空

void test(){char *c = malloc(strlen("我喜欢咖啡") + 1);strcpy(c, "我喜欢咖啡");char **s = &c;while(strlen(*s) =p; i--){w[i+1] = w[i];}w[p] = c;} 该函数用于在char *中插入一个新字符. 此外,这个函数在一个 while 循环中.它工作正常,但到循环运行第三次时,它只设 ..
发布时间:2021-07-05 18:46:46 其他开发

使用 realloc 更改 c 中数组的大小

我在 ansi-C 中遇到了问题.我正在尝试在数组上使用 C 进行堆栈.但是我遇到了 pop 和 push 函数的问题——我不知道如何改变数组的大小.我想我可以使用函数 realloc() 以某种方式实现它,但我不知道如何. 有人可以帮忙吗? 解决方案 这是一个示例代码: #include #include int main(int argc, char **argv){int * ..
发布时间:2021-07-05 18:46:43 其他开发