标签: realloc

如果我重新分配并且新大小为0会发生什么?这相当于免费吗?

给出以下代码:

int *a = NULL;
a = calloc(1, sizeof(*a));
printf("%d\n", a);
a = realloc(a, 0);

printf("%d\n", a);
return (0);
Run Code Online (Sandbox Code Playgroud)

它返回:

4078904
0
Run Code Online (Sandbox Code Playgroud)

这个realloc是免费的吗?

注意:我在WindowsXP下使用MinGW.

c realloc

8
推荐指数
2
解决办法
412
查看次数

realloc调用会引入多少开销?

realloc在循环的每次迭代中使用,迭代次数for超过10000次.

这是一个好习惯吗?realloc如果被调用很多次会导致错误吗?

c c++ memory memory-management realloc

8
推荐指数
2
解决办法
5444
查看次数

realloc但只有前几个字节才有意义

假设我曾经习惯ptr = malloc(old_size);old_size字节分配内存块.只有第一个header_size字节才有意义.我要把尺寸增加到new_size.

new_size大于old_sizeold_size大于header_size.

之前:

/- - - - - - - old_size - - - - - - - \
+===============+---------------------+
 \-header_size-/
Run Code Online (Sandbox Code Playgroud)

后:

/- - - - - - - - - - - - - - - new_size - - - - - - - - - - - - - - - - - - -\
+===============+------------------------------------------------------------+
\- header_size-/
Run Code Online (Sandbox Code Playgroud)

我不关心之后存储的内容,ptr + …

c malloc memory-management libc realloc

8
推荐指数
1
解决办法
275
查看次数

C编程 - realloc应该多久使用一次?

我有一个关于动态内存分配的问题.

上下文:我正在编写一个程序来读取单词的文本文件,并计算每个单词出现的频率(每行一个单词).

这个特殊的函数读取文件,计算行和字符,然后动态地将内存分配给字符串指针数组,一个数组存储每行的字符数和字符串本身.(其他部分与我的问题不太直接相关).

问题:如果空间不足,我应该多久重新分配一次内存?我设置了一个常量("memstart")来设置初始内存分配值.在下面的代码片段中,我重新分配了"memstart"值的每一行.如果重新分配更大的内存块而不是每次增加1"变量类型"的内存空间,程序是否会更快?

对于这样的事情,最佳做法是什么?

代码剪辑:

int read_alloc(FILE* fin, FILE *tmp, char **wdp, int *sz){
    int line_cnt= 0, chr, let=1;
    do{
        chr=getc(fin);
        let++;          
        //count characters

        if(chr!=EOF){
            chr=tolower(chr);
            fputc(chr, tmp);
        }               
        //convert to lcase and write to temp file

        if ('\n' == chr || chr==EOF){
            sz[(line_cnt)]=((let)*sizeof(char));            //save size needed to store string in array
            *(wdp+(line_cnt))=malloc((let)*sizeof(char));   //allocate space for the string
            if ((line_cnt-1) >= memstart){
                realloc(wdp, (sizeof(wdp)*(memstart+line_cnt)));    //if more space needed increase size
                realloc(sz, (sizeof(sz)*(memstart+line_cnt)));
            }
            line_cnt++;         
            let=1;
        }
    } …
Run Code Online (Sandbox Code Playgroud)

c realloc dynamic-memory-allocation

8
推荐指数
2
解决办法
909
查看次数

STL矢量是realloc的更好版本吗?

我相信在C++中,处理重新分配的更好方法是使用STL向量,因为它保证了连续的存储位置.

我有几个问题要理解其中的区别:

  1. 是否有任何情况我需要更喜欢realloc而不是vector?
  2. 还有什么(除了vector之外)相当于C++中的realloc吗?

谢谢,

c++ stl vector realloc

7
推荐指数
4
解决办法
6752
查看次数

Realloc与链接列表扫描

我必须从一个文件中读取一个未知数量的行并将它们保存到一个结构中(我希望避免使用预处理来计算元素的总数).在读取阶段之后,我必须对这些行的每个元素进行一些计算.

我想出了两种方法:

  1. 使用realloc每个我读了一排时间.这样,分配阶段很慢,但由于索引访问,计算阶段更容易.

  2. 每次我读一行时都使用链表.这样,分配阶段更快,但计算阶段更慢.

从复杂的角度来看,有什么更好的?

c linked-list realloc

7
推荐指数
2
解决办法
2052
查看次数

修剪时realloc会失败(返回NULL)吗?

如果做下一个:

int* array = malloc(10 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

他们使用realloc:

array = realloc(array, 5 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

在第二行(并且只有它),它可以返回NULL吗?

c memory-management realloc

7
推荐指数
2
解决办法
1359
查看次数

realloc没有释放旧记忆

我想使用realloc来增加内存大小,同时保持指针不变(因为调用者使用它).realloc并不总是如此; 有时它返回一个不同的指针并释放旧的指针.我想"尝试"重新分配内存,如果不可能,使用原始指针回退到另一个方法 - 但realloc已经破坏了!

有没有办法尝试增加malloc的内存而不破坏(作为realloc)旧指针,如果它不可能?

例如

void *pold;
void *pnew = realloc(pold, newsize);
if (pnew != pold)
{
     free(pnew);
     DoDifferently(pold); // but pold is freed already
}
Run Code Online (Sandbox Code Playgroud)

PS我不关心可移植性(仅限linux,因此标签).

c c++ linux gcc realloc

7
推荐指数
1
解决办法
967
查看次数

使用realloc(X,0)代替free()并使用长度为+1的malloc +1

所以这次我真的不知道如何把这个头衔.首先,我想说,如果问题与"家庭作业"有关,我在这个页面上看到了一些关于警告的评论.我的是,但它也已完成,我只是想进一步了解代码发生了什么.

我也读了一段时间的帖子和书籍,但我想我仍然缺少一些东西.

我有两行代码我在我使用的代码中不太了解.这项工作是关于获取用作参数的任何文件(如果它是0文件,它从stdin读取),并在标准输出上向后打印它.所有这些,谈论C,因为我试图放入标签.

第一个问题是:

array = realloc (array, 0);
Run Code Online (Sandbox Code Playgroud)

其中数组定义为

char **array;
Run Code Online (Sandbox Code Playgroud)

问题是免费不起作用,它没有释放使用的空间(也许我用错了?在其他地方我知道如何使用它,但不是这次).通过我已经完成的测试和我读过的内容,我相信realloc也在做同样的事情,但我不是100%.

第二个是:

char* alloc = malloc (strlen ((char*)string)+1);
Run Code Online (Sandbox Code Playgroud)

其中alloc用于复制我要放入数组的行的确切长度,所以我可以在此之后向后打印文本.

问题是为什么我必须使用+1.我的意思是如果由于某种原因我不使用它不起作用,我尝试使用不同的数字,它每次都有效,但如果我不这样做+1它不能正常工作.

我知道可能这个问题太模糊,而且写的很糟糕,但是我又不确定这一点,我也尽力解释自己(英语没有母语,因为它可能很明显).

c free memory-management realloc

7
推荐指数
3
解决办法
9051
查看次数

当新大小与旧大小相同时,realloc的行为

我正在努力提高代码效率.我有这样的事情:

    typedef struct{
    ...
    }MAP;



    MAP* pPtr=NULL;
    MAP* pTemp=NULL;
    int iCount=0;
    while (!boolean){
    pTemp=(MAP*)realloc(pPtr,(iCount+1)*sizeof(MAP));
    if (pTemp==NULL){
    ...
    }
    pPtr=pTemp;
    ...
    iCount++;
    }
Run Code Online (Sandbox Code Playgroud)

内存正在动态分配.我想减少realloc调用,使代码更有效.我想知道如果新大小等于旧大小,realloc将如何表现.电话会被忽略吗?

c memory realloc

7
推荐指数
1
解决办法
3309
查看次数