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
实际上是一个指针,它指向内存中的随机地址,因为你没有初始化它。
- 删除类型定义
正如@Cheatah已经说过的:typedef似乎是不必要的,并且隐藏了ntuple
实际上是一个指针而不是一个结构体的信息。
那么您将以以下代码结束:
struct ttype {
int arity;
char* items[MAX_ARITY];
};
int main() {
struct ttype obj;
put(0, "zubair", &obj);
}
注意
我不知道put
函数是如何实现的,但我认为第三个参数应该是对ttype
结构体的引用。如果不是这样,请调整。
- 保持你的类型定义并分配一些内存
如果你真的想保持你的类型定义,那么让你的指针指向一些有效的内存空间:
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
.