抱歉,我知道很多相关的问题已经被问到了,所以我会保持简单。
尽管进行了多年的编程,我还是找不到在函数内调整和修改数组(或多个)数组大小的正确语法。例如,假设我想要一个函数用一组“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)
我知道这行不通,因为我可能需要使用指向指针的指针,但我无法解析要在函数内部和外部使用的指针、指针到指针和地址表示法的哪种组合。
任何简单的建议表示赞赏!
我正在调整数组的指针以避免向后复制数组的所有内容。问题是我想在某个时刻释放数据,这将产生分段错误,除非我将指针移回其原始地址。有什么办法可以避免这种情况吗?因为如果移位是在函数内部执行的,则调用函数可能不知道移位的幅度。
例子:
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)
我在这里期待太多了吗?