[英]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.