[英]C can't assign the value to the struct field
我正在嘗試使用init()函數初始化結構值。 它看起來不錯,但是在init()函數執行結束時卻不以某種方式對其進行分配。 此外,在init()函數中,一切正常,但返回的值消失了。 我花了幾個小時,但不知道發生了什么。
這是我的代碼和結構:
typedef struct svm_data
{
int num_points;
int num_dimensions;
double* training_set;
double* descision_set;
} svm_data_t;
void init()
{
init_data(&test_data);
init_data(&check_data);
printf("in init: test_data->num_dimensions: %d\n", test_data.num_dimensions);
printf("in init: check_data->num_dimensions: %d\n", check_data.num_dimensions);
set_correct_descision_set(&check_data);
}
void init_svm_data(svm_data_t* data)
{
int np = 3;
int nd = 3;
data = (void*)malloc(sizeof(svm_data_t));
data->num_points = np;
data->num_dimensions = nd;
data->training_set = (void*)malloc(sizeof(double)*(NUM_DIMENSIONS+1));
data->descision_set = (void*)malloc(sizeof(double)*(NUM_DIMENSIONS+1));
printf("test_data->num_dimensions: %d\n", data->num_dimensions);
}
打印:
test_data->num_dimensions: 3
test_data->num_dimensions: 3
in init: test_data->num_dimensions: 0
in init: check_data->num_dimensions: 0
但我要打印
test_data->num_dimensions: 3
test_data->num_dimensions: 3
in init: test_data->num_dimensions: 3
in init: check_data->num_dimensions: 3
我不明白我在做什么錯。 請幫忙。
data = (void*)malloc(sizeof(svm_data_t));
在這里,您將malloc()
的返回值分配給data
變量,因此它會遮蓋(覆蓋)其原始值(即,您傳入的結構的地址)。 您根本不需要此行,因為您已經傳遞了(堆棧分配的)結構的地址。
備注:
在不需要的行上,實際上是在函數返回時松開了指向malloc()
內存的指針,因此甚至泄漏了內存。
讓我們在這里看幾行:
init_data(&test_data);
在這里,您調用了init_data
(我假設它實際上是init_svm_data
),並帶有一個指向我認為是正常結構的指針,即,您全局聲明svm_data_t test_data;
。
然后在init_svm_data
執行以下操作:
data = (void*)malloc(sizeof(svm_data_t));
在這里,您將覆蓋傳遞給函數的指針。
這導致了兩個問題:首先是init_svm_data
中的指針是該函數的局部指針,因此在init_svm_data
之外, init_svm_data
更改(賦值)將init_svm_data
。 第二個問題是,如果我用test_data
聲明正確猜到了,則不需要分配此內存,因為編譯器已經完成了分配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.