[英]C - Reassign pointer inside of struct to pointer outside of struct
我有两个指针,每个指针指向一个不同的数组。 指针之一在结构内部,如下所示:
typedef struct
{
int N; /* Number of Elements in array */
double *c; /* Pointer to an array */
/* Other members.... */
} CS;
该结构通过以下方式初始化:
CS->N = n; /* n is an integer of an initially unknown size */
CS->c = (double *)malloc(n * sizeof(double));
结构中的指针CS->C
包含我不再关心的数据。
我的其他指针定义如下:
double *alpha;
alpha = (double *)malloc(CS->N * sizeof(double));
我需要用alpha
替换CS->C
的内容。 我知道我可以做一些天真的事情,例如:
for (i=0;i<CS->N;i++) /* i is an integer */
CS->c[i] = alpha[i];
我也可以这样使用memcpy:
memcpy(CS->c,alpha,CS->N * sizeof(double));
我的理解是,这两种方法都会将内容从位于alpha
的内存复制到CS->C
占用的内存。 这是一个非常昂贵的操作,将CS->C
的分配简单更改为alpha
会更有意义。
我怎样才能做到这一点?
我试图通过像CS->C = &alpha
这样来重新分配指针,但这给了我以下警告“从不兼容的指针类型分配”。
注意:这是在完全符合要求的情况下使用ANSI C89,即编译器选项为: -Wall -pedantic -ansi
编辑1
释放CS->c
并将其分配给alpha
是:
free(CS->c);
CS->c = alpha;
不起作用。 它导致CS->c
每个条目都等于0.0
,并导致我的程序段错误。
编辑2
我想我知道为什么我第一次编辑中建议的方法不起作用。 alpha
是在函数内部创建和初始化的临时指针,因此一旦退出该函数, alpha
占用的内存将被“释放”。 由于CS->c
指向该内存,因此它也被释放。 基于这一发现,我想我将重新编写代码,以便最初交换alpha
和CS-c
,以便当再次切换它们时,结束顺序将是正确的。 谢谢大家的宝贵意见。
只需复制指针
CS->C = alpha;
Alpha是指向double的指针,CS-> C也是,类型匹配,您只需更改指针即可。
/!\\不要忘记释放旧的CS-> C ...
释放旧指针,然后直接连接新指针。 (不是新指针的地址)
结构体中的指针
CS->c
包含我不再关心的数据。我的其他指针定义如下:
double *alpha;
alpha = malloc(CS->N * sizeof(double));
...
free (CS->c);
CS->c = alpha ; alpha=NULL;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.