[英]In C, how to malloc and free a SOCKET (already a pointer)
SOCKET
来自winsock.h
声明为
SOCKET BillerSocket;
据我所知, SOCKET
已经是伪装的指针,所以我不应该做free(*BillerSocket);
。
我用它malloc
BillerSocket = malloc(sizeof(SOCKET));
我得到这个警告
[警告]分配使指针从整数变为无强制转换[默认启用]
当我free
了SOCKET
free(BillerSocket);
我收到警告和注释,似乎可以告诉我该怎么办。
[警告]传递参数1到'free'使指针从整数开始而没有强制转换[默认启用]
129 0 c:\program files\dev-cpp\mingw64\x86_64-w64-mingw32\include\combaseapi.h In file included from c:\program files\dev-cpp\mingw64\x86_64-w64-mingw32\include\combaseapi.h
14 c:\program files\dev-cpp\mingw64\x86_64-w64-mingw32\include\objbase.h from c:\program files\dev-cpp\mingw64\x86_64-w64-mingw32\include\objbase.h
17 c:\program files\dev-cpp\mingw64\x86_64-w64-mingw32\include\ole2.h from c:\program files\dev-cpp\mingw64\x86_64-w64-mingw32\include\ole2.h
12 c:\program files\dev-cpp\mingw64\x86_64-w64-mingw32\include\wtypes.h from c:\program files\dev-cpp\mingw64\x86_64-w64-mingw32\include\wtypes.h
10 c:\program files\dev-cpp\mingw64\x86_64-w64-mingw32\include\winscard.h from c:\program files\dev-cpp\mingw64\x86_64-w64-mingw32\include\winscard.h
97 c:\program files\dev-cpp\mingw64\x86_64-w64-mingw32\include\windows.h from c:\program files\dev-cpp\mingw64\x86_64-w64-mingw32\include\windows.h
1 main.c
from main.c
438 16 c:\program files\dev-cpp\mingw64\x86_64-w64-mingw32\include\stdlib.h
[注意]预期为“ void *”,但参数为“ SOCKET”类型
如何删除警告?
如果更仔细地查看winsock.h
,您会发现SOCKET
不是指针,而是一个整数:
typedef UINT_PTR SOCKET;
UINT_PTR
不是UINT
的指针( PUINT
和LPUINT
是)。 它是与指针大小相同的UINT
。 因此, UINT_PTR
在32位进程中为4字节,在64位进程中为8字节。 有关更多详细信息,请参见MSDN文档:
UINT_PTR
一个未签名的INT_PTR。在BaseTsd.h中声明此类型,如下所示:
#if defined(_WIN64) typedef unsigned __int64 UINT_PTR; #else typedef unsigned int UINT_PTR; #endif
您无需使用malloc()
和free()
来管理SOCKET
值,而必须使用socket()
和closesocket()
来代替:
SOCKET BillerSocket;
...
BillerSocket = socket(...);
...
closesocket(BillerSocket);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.