标签: realloc

为什么在没有数据复制的情况下,像realloc()这样的标准C库中没有函数?

例如,我想要这样一个功能:

char *dst = (char*)malloc(512);
char *src = (char*)malloc(1024);
...
dst = (char*)realloc(dst, 1024);
memcpy(dst, src, 1024);
Run Code Online (Sandbox Code Playgroud)

如您所见,我只是希望函数realloc()扩展缓冲区的大小,但C库中的realloc()可能会复制旧地址中的数据.那么在我想要的任何库中都有一个函数吗?

c memory realloc

3
推荐指数
2
解决办法
1166
查看次数

c realloc, size 的真正含义是什么

有人可以解释一下 realloc 中的第二个参数到底是什么,因为我找不到测试它的方法。

所以假设我们有这样的事情

int *p = malloc(sizeof(int)); //we have just enough space to store single int value
Run Code Online (Sandbox Code Playgroud)

现在,如果我想在 p 中存储 2 个 int 值,我是否需要发送到 realloc 作为2 * sizeof(int)块的第二个参数 新大小,或者sizeof(int)因为它需要为 int 大小扩展内存

如果我应该在这种情况下2 * sizeof(int)将新块的总价值发送到 realloc ,如果我只发送它sizeof(int),它会做什么,只返回原始指针并且在内存中什么都不做或其他什么?

c realloc

3
推荐指数
1
解决办法
366
查看次数

重新分配内存访问冲突读取位置

可能我的大脑现在不能正常工作......我想知道为什么我在我的代码中收到提到的错误:

int ** zm;
zm = (int**)calloc(1, sizeof(int*));
*zm = (int*)calloc(1, sizeof(int));
*zm[0] = 5;
*zm = (int*)realloc(*zm, 2*sizeof(int));
*zm[1] = 10; // Access violation reading location 0xFFFFFFFFFFFFFFFF
Run Code Online (Sandbox Code Playgroud)

有人可以解释该代码中发生了什么吗?

c pointers memory-leaks memory-management realloc

3
推荐指数
1
解决办法
1077
查看次数

Realloc 不复制旧数据

背景:

我使用 calloc() 创建了一个数组,一切都很好。然后我使用 realloc() 使数组更大。它似乎只是创建了一个没有任何内容的新指针,并在我尝试访问数组中的元素时调用了运行时错误。

我的代码:

#include <stdio.h>

int main() {

  int *arr;

  for (int i = 0; i < 5; i++){
      if (i == 0) {
          if ((arr = (int *) calloc(1, sizeof(int))) == NULL) {
              printf("NO MORE SPACE TERMINATING PROGRAM");

              return NULL;
          }

      } else {
          int *tmp;

          if ((tmp = (int *)realloc(arr, 4*sizeof(int)) == NULL)){
              printf("NO MORE SPACE TERMINATING PROGRAM");
          }

          arr = tmp;
      }

      arr[i] = i;
  }
}
Run Code Online (Sandbox Code Playgroud)

arr[i]=i;当 i = 1 时,它在线上抛出运行时错误; …

c arrays realloc calloc dynamic-memory-allocation

3
推荐指数
1
解决办法
1050
查看次数

使用realloc获得的扩展内存包含了什么?

当我realloc用来重新调整我calloc之前用来初始化的内存(一个数组)时,它是否仍然在整个缓冲区中保持为0?或新部分未初始化?

c realloc

3
推荐指数
1
解决办法
84
查看次数

将 fgets 与 realloc() 结合使用

我正在尝试创建一个函数来从文本文件中读取一行,fgets()并将其存储在动态分配的 char* 中,malloc()但我不确定如何使用realloc(),因为我不知道这一行的长度文本,并且不想只是猜测该行可能的最大大小的幻数。

#include "stdio.h"
#include "stdlib.h"
#define INIT_SIZE 50

void get_line (char* filename)

    char* text;
    FILE* file = fopen(filename,"r");

    text = malloc(sizeof(char) * INIT_SIZE);

    fgets(text, INIT_SIZE, file);

    //How do I realloc memory here if the text array is full but fgets
    //has not reach an EOF or \n yet.

    printf(The text was %s\n", text);

    free(text);

int main(int argc, char *argv[]) {
    get_line(argv[1]);
}
Run Code Online (Sandbox Code Playgroud)

我计划用文本行做其他事情,但为了保持简单,我刚刚打印了它,然后释放了内存。

另外: main 函数是通过使用文件名作为第一个命令行参数来启动的。

c malloc realloc

3
推荐指数
1
解决办法
2729
查看次数

无论如何如何重新分配内存,即使在c ++中realloc()失败

使用malloc()成功分配之后,有时程序需要增加数组的大小。尽管malloc()成功运行,但realloc()失败。

我已经使用这段代码来处理realloc()的失败。这里T是模板参数。array是类型T的指针,_size是已使用的数组的总索引,_maxSize是可用索引的最大数目。 _size达到_maxSize时需要重新分配

if(_size == _maxSize){
    _maxSize *= 2;
    T *temp;
    temp = (T *) realloc( array, sizeof( T ) * (_maxSize) ) ;
    if(temp == NULL){
        printf("...reallocation of memory failed...\n");
        exit(0);
    }
    else{
        array = temp;
    }
}
Run Code Online (Sandbox Code Playgroud)

尽管处理了realloc()的失败,但是程序确实需要增加数组的大小,即使realloc()失败,我也不知道如何执行重新分配。

c++ pointers realloc dynamic-memory-allocation

3
推荐指数
1
解决办法
88
查看次数

realloc() 如何重新分配内存?

如何realloc()重新分配首先分配的内存malloc()

我知道malloc()在重新分配内存之前您需要使用它,但我不明白这应该如何工作。如果动态内存对象的大小减少了realloc()怎么办?调用后是否刚刚删除了该对象的各个部分realloc()


我的问题是:

  1. realloc()函数如何重新分配由创建的动态内存对象malloc()

注意:我做了这个问答是因为许多初学者似乎仍然对重新分配内存使用的问题感到困惑,realloc()尽管这里已经存在关于该主题的问题。对于不熟悉该主题但仍不能代表realloc(). 因此,由于问题,恕我直言,仍然不太适合我想要给出的答案,我进行了自己的问答。

c malloc memory-management heap-memory realloc

3
推荐指数
1
解决办法
1317
查看次数

为什么使用 std::vector 而不是 realloc?

在这里,在这个问题中,声明realloc在 C++ 中没有类似运算符或函数。如果您想调整数组的大小,只需std::vector改为。我什至看到 Stroustrup 在这里说同样的话。

我相信实现一个并不难。应该有一个不实施的理由。答案只说要使用,std::vector但没有说为什么没有实施。

不实现realloc-like 运算符或函数而宁愿使用的原因是什么std::vector

c++ vector realloc dynamic-memory-allocation

3
推荐指数
1
解决办法
157
查看次数

realloc 如何处理字符串中的空字节?

这里是相对较新的 C 程序员。我正在审查以下代码,作为我正在练习 C 的业余项目的教程。该abuf结构的要点是创建一个可以附加的字符串。这是代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct abuf {
    char* str;
    unsigned int size;
} abuf;


void abAppend(abuf *ab, const char *s, int len) {
  char *new = realloc(ab->str, ab->size + len);
  if (new == NULL) return;
  memcpy(&new[ab->size], s, len);
  ab->str = new;
  ab->size += len;
}

int main(void) {
    abuf ab = {
        NULL,
        0
    };

    char *s = "Hello";

    abAppend(&ab, s, 5);
    abAppend(&ab, ", world", 7);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

一切都编译完毕,我的测试(为简单起见进行了编辑)显示字符串“Hello”存储在 …

c string null-terminated realloc

3
推荐指数
1
解决办法
105
查看次数