我定义了这个结构:
typedef struct Socket_s
{
...
SocketConnectFunc Connect;
...
}Socket;
其中SocketConnectFunc定义为:
typedef Socket_Return (*SocketConnectFunc) (void * self);
初始化Socket结构时,我称之为:
void Init(Socket * sock)
{
sock = (Socket *)malloc(sizof(Socket));
if(sock)
sock->Connect = SocketConnect;
}
但是,当我尝试调用sock->Connect()
时,我得到了分段错误,甚至没有输入该功能。我分配sock->Connect
的方式有问题吗?
NB。 Socket_Return是一个枚举(typedef enum {SUCCESS,FAIL} Socket_Return
)
答案 0 :(得分:4)
我会这样写:
Socket * CreateSocket() {
Socket * sock = (Socket *) malloc( sizeof( Socket ) );
if ( sock ) {
sock->Connect = SocketConnect;
}
return sock;
}
答案 1 :(得分:4)
您需要传递指针的地址。仅传递指针,您无法在调用者中更改它
void Init(Socket ** sock) {
*sock = malloc(sizeof **sock); /* don't cast the return value of malloc! */
if (*sock)
(*sock)->connect = SocketConnect;
}
并称之为
struct Socket_s *mysock;
Init(&mysock);