0

Sorry if it is a too simple question. I was trying to compile some socket invoking code, and I had to use this

SOCKADDR_IN * sin;
sin.sin_addr.s_addr    = htonl(INADDR_ANY);   

The problem is that I am told that I must initialize the pointer. (Is it necessary ?) Btw, how to initialize a structure pointer ?

4

2 回答 2

4

您必须为SOCKADDR_IN实例分配内存。不过,您不必创建指针;你可以在堆栈上分配它

SOCKADDR_IN sin;
sin.sin_addr.s_addr    = htonl(INADDR_ANY);

&如果要传递给sin需要SOCKADDR_IN*

SOCKADDR_IN sin;
sin.sin_addr.s_addr    = htonl(INADDR_ANY);
....
function_using_socket_pointer(&sin);

更新:您似乎想使用动态分配的指针。您可以使用

SOCKADDR_IN* sin = malloc(sizeof(*sin));
if (sin == NULL) {
    /* insert oom handling here */
}
sin.sin_addr.s_addr    = htonl(INADDR_ANY);
....
free(sin);
于 2013-06-10T15:04:08.620 回答
3

您想在堆栈上声明一个而不是作为指针。指针只是一个内存地址,而不是对象的实际实例。

只需将您的代码更改为

SOCKADDR_IN sin;
sin.sin_addr.s_addr    = htonl(INADDR_ANY);   

然后当你需要使用它时,像这样获取它的地址:&sin

编辑原始问题答案

如果你真的想要初始化一个指针,可以这样做:

SOCKADDR_IN* sin = (SOCKASSR_IN*)malloc(sizeof(SOCKADDR_IN));
....use sin....
free(sin);

这将在堆上分配内存,其大小设置为 SOCKADDR_IN 结构的大小。但如前所述,这是不必要的,通常应该避免,除非您需要在当前堆栈帧(函数)之外使用此结构。

于 2013-06-10T15:05:15.247 回答