小编JWD*_*WDN的帖子

在函数内部使用 realloc

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

尽管进行了多年的编程,我还是找不到在函数内调整和修改数组(或多个)数组大小的正确语法。例如,假设我想要一个函数用一组“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)
}
Run Code Online (Sandbox Code Playgroud)

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

任何简单的建议表示赞赏!

c function dynamic-memory-allocation

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

如何使用已调整的指针安全地释放内存

我正在调整数组的指针以避免向后复制数组的所有内容。问题是我想在某个时刻释放数据,这将产生分段错误,除非我将指针移回其原始地址。有什么办法可以避免这种情况吗?因为如果移位是在函数内部执行的,则调用函数可能不知道移位的幅度。

例子:

int i;
float * y = malloc(10*sizeof(float));

for(i=0;i<10;i++) y[i] = (float)i;

y += 2; 

for(i=0;i<8;i++) printf("%d\n",y[i]);

free(y); // this will generate a segmentation fault
y -= 2; free(y); // this is OK, but I would like to avoid it
Run Code Online (Sandbox Code Playgroud)

我在这里期待太多了吗?

c memory free pointers

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

标签 统计

c ×2

dynamic-memory-allocation ×1

free ×1

function ×1

memory ×1

pointers ×1