在C中初始化结构 - 避免分段错误

tpa*_*r44 1 c struct pointers initialization

我是C的新手,对初始化结构有疑问.我正在使用一个我没有创建的结构,所以我不知道它里面是什么.因此,我没有初始化它,但编译器抱怨.所以我把它设置为NULL但是我遇到了分段错误.然后我查找了如何将所有内容设置为0并且它说将其设置为等于{0}.这也给了我一个分段错误.因为我知道我调用的函数是正确的,并且我传递的数组的大小正确,我几乎可以肯定它与我初始化结构的方式有关.初始化是

struct aes_ctx *aes_struct = {0}
Run Code Online (Sandbox Code Playgroud)

该函数的标题是

void aes_setkey(aes_ctx *aes, const void *key, u_int len);
Run Code Online (Sandbox Code Playgroud)

我称之为的方式是

aes_setkey(aes_struct, aes, CCA_STRENGTH);
Run Code Online (Sandbox Code Playgroud)

其中aes是大小为16的缓冲区,CCA_STRENGTH是16的常量int.

总结一下这个问题,我认为我初始化结构的方式导致它在以后无法使用.任何可以给我的帮助将非常感激!谢谢!

Ed *_* S. 5

你不能用那种方式初始化一个指针(好吧,你可以,它只是没有指向任何有效的指针).这样的事情就是你所追求的:

struct aes_ctx aes_struct = {0};
Run Code Online (Sandbox Code Playgroud)

然后你可以将地址传递aes_struct给函数,但这取决于你是否需要动态分配这个东西(所需的范围和类型的大小将决定这一点).

所以...

struct aes_ctx aes_struct = {0};
aes_setkey(&aes_struct, aes, CCA_STRENGTH);
Run Code Online (Sandbox Code Playgroud)

要么

struct aes_ctx *aes_struct = malloc(sizeof(struct aes_ctx));
/* you may want to initialize the structure via memset or some init function */
aes_setkey(aes_struct, aes, CCA_STRENGTH);
Run Code Online (Sandbox Code Playgroud)