【问题标题】:Using realloc inside a function [duplicate]在函数中使用 realloc [重复]
【发布时间】:2013-04-16 16:51:37
【问题描述】:

抱歉,我知道已经提出了很多相关问题,所以我会保持简单。

尽管有几年的编程经验,我还是找不到正确的语法来调整和修改函数内的一个(或多个)数组。例如,假设我想要一个函数用一组“n”个数字填充一个数组,其中“n”是在数组中定义的:

int main(int argc, char *argv[]) {
    float *data = NULL
    int n = myfunction(data);
    for(i=0;i<n;i++) printf("%f\n",data[i]);
    free(data);
}

int myfunction(float *input) {
    int i,n=10;
    input = (float *) realloc( input, n*sizeof(float) );
    if(input!=NULL) {
        for(i=0;i<n;i++) input[i] = (float)i;
        return(n);
    else return(-1)
}

我知道这行不通,因为我可能需要使用指向指针的指针,但我无法确定要在函数内部和外部使用的指针、指针指向指针和地址表示法的组合。

感谢任何简单的建议!

【问题讨论】:

标签: c function dynamic-memory-allocation


【解决方案1】:

你需要传递一个指向myFunction的指针

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

int myfunction(float **input) {
    int i,n=10;
    *input = realloc( *input, n*sizeof(float) );
    if(*input!=NULL) {
        for(i=0;i<n;i++) (*input)[i] = (float)i;
        return(n);
    }
    else return(-1);
}

int main(int argc, char *argv[]) {
    float *data = NULL;
    int n = myfunction(&data);
    int i;
    for(i=0;i<n;i++) printf("%f\n",data[i]);
    free(data);
    return 0;
}

【讨论】:

  • 太完美了,谢谢!如果我向其他人解释它,我会说您需要传递数组的地址,告诉函数将其视为指向指针的指针,并在函数内使用时引用指针本身realloc() 或赋值。干杯!
  • 如果数组中已经有值怎么办? realloc 原则上复制值,但它是在函数中完成的。价值观会以这种方式丢失吗?
【解决方案2】:

最简单的方法是将旧指针传递给myfunction(),并让它返回新指针(如果realloc() 设法就地扩大区域,则可能与旧指针相同)。

请注意,realloc() 可能会失败,在这种情况下,您不想丢失仍然分配的旧内存,因此在不检查的情况下覆盖相同的指针是一个坏主意。

【讨论】:

  • 我很欣赏你的观点,在其他情况下我也会这样做,但是“真实”程序比我发布的简单示例要复杂得多,并且需要修改两个或多个数组,每个数组都在增长根据需要使用 realloc() 。
猜你喜欢
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
相关资源
最近更新 更多