C语言 生成Struct对象问题


struct ttype {
int arity;
char* items[MAX_ARITY];
};
typedef struct ttype* ntuple;
int main() {
ntuple obj;
put(0, "zubair", obj);
}

在编译过程中,使用未初始化的局部变量'obj'给我错误。

问题

你的问题是你的typedeftypedef struct ttype* ntuple;

因此,您的

ntuple obj;

将被"转换";

struct ttype * obj;

所以obj实际上是一个指针,它指向内存中的随机地址,因为你没有初始化它。

<标题>解决方案
  1. 删除类型定义

正如@Cheatah已经说过的:typedef似乎是不必要的,并且隐藏了ntuple实际上是一个指针而不是一个结构体的信息。

那么您将以以下代码结束:

struct ttype {
int arity;
char* items[MAX_ARITY];
};
int main() {
struct ttype obj;
put(0, "zubair", &obj);
}

注意

我不知道put函数是如何实现的,但我认为第三个参数应该是对ttype结构体的引用。如果不是这样,请调整。

  1. 保持你的类型定义并分配一些内存

如果你真的想保持你的类型定义,那么让你的指针指向一些有效的内存空间:

struct ttype {
int arity;
char* items[MAX_ARITY];
};
typedef struct ttype* ntuple;
int main() {
ntuple obj = malloc(sizeof(struct ttype));
put(0, "zubair", obj);
// don't forget to free this dude!
free(obj);
}

我建议重命名你的typedef如果你真的需要…例如:ttype_ptr.

相关内容

  • 没有找到相关文章

最新更新