gpt4 book ai didi

C 无法将值分配给结构体字段

转载 作者:行者123 更新时间:2023-11-30 18:32:09 25 4
gpt4 key购买 nike

我正在尝试使用 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. You should not cast the return value of malloc() .

  2. 在不需要的行上,您实际上丢失了指向 malloc() 的指针。函数返回时会占用内存,因此甚至会泄漏内存。

关于C 无法将值分配给结构体字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16282224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com