当printf没有在Struct上下文中使用时,c-Seg错误



我尝试使用添加了数据和函数的Struct。总的来说,这是可行的,但当Struct只是初始化并且设置了值而没有打印时,这会导致Seg Fault,可能只是我怀疑出了问题,可能会在代码变得更复杂时造成麻烦。

这里的代码,当没有使用printf时,存在seg故障:

#include <stdlib.h>
#include <stdio.h>
// https://stackoverflow.com/questions/14768230/malloc-for-struct-and-pointer-in-c
typedef struct s_vec2 t_vec2;
struct s_vec2 {
float *data;
size_t size;
void (*set_x)(t_vec2*, float);
void (*set_y)(t_vec2*, float);
float (*get_x)(t_vec2*);
float (*get_y)(t_vec2*);
};
t_vec2 *new_vec2() {
t_vec2 *buf;
buf->size = 2;
if(!(buf = (t_vec2*)malloc(sizeof(t_vec2))))
return (0);

if(!(buf->data = (float*)malloc(sizeof(float) * 2))) {
free(buf);
return (0);
}
return buf;
}
void func_set_x(t_vec2 *v, float x) {
v->data[0] = x;
}
void func_set_y(t_vec2 *v, float y) {
v->data[1] = y;
}
float func_get_x(t_vec2 *v) {
return v->data[0];
}
float func_get_y(t_vec2 *v) {
return v->data[1];
}
int main() {
t_vec2 *a = new_vec2();
a->set_x = func_set_x;
a->set_y = func_set_y;
a->get_x = func_get_x;
a->get_y = func_get_y;
float val = 5;
a->set_x(a,val);
a->set_y(a,6);
// printf("vec %f %fn",a->get_x(a), a->get_y(a)); // if this line is remove, that's cause a seg fault why ????
return(0);
}
t_vec2 *new_vec2() {
t_vec2 *buf;
buf->size = 2;
if(!(buf = (t_vec2*)malloc(sizeof(t_vec2))))
return (0);

if(!(buf->data = (float*)malloc(sizeof(float) * 2))) {
free(buf);
return (0);
}
return buf;
}

在为buf分配内存之前,您正在尝试取消引用它。

t_vec2 *buf;
buf->size = 2;

相关内容

  • 没有找到相关文章

最新更新