簡體   English   中英

C無法將值分配給struct字段

[英]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變量,因此它會遮蓋(覆蓋)其原始值(即,您傳入的結構的地址)。 您根本不需要此行,因為您已經傳遞了(堆棧分配的)結構的地址。

備注:

  1. 您不應該轉換malloc()的返回值

  2. 在不需要的行上,實際上是在函數返回時松開了指向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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM