在c语言中创建套接字时解引用空指针



我正在尝试将linux开发的程序转换为visual studio。程序是用C语言编写的。我尝试将socket.h中的socket函数替换为visual studio中的socket函数。这是我目前掌握的信息。

#define _CRT_SECURE_NO_WARNINGS
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x6000
#endif
#undef UNICODE
#define UNICODE
#undef _WINSOCKAPI_
#define _WINSOCKAPI_
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
struct the_socks
{
int sock_file_d;
struct sockaddr_in my_addr;
};
int  main()
{
struct the_socks* my_sock;
int state = -1;
my_sock = (struct the_socks*)malloc(sizeof(struct the_socks));
struct sockaddr_in client_n, server_n;
if ((my_sock->sock_file_d = socket(AF_INET, SOCK_STREAM, 0)) >= 0)
{
state = 0;
}
}

我没有得到一个错误在linux中,即使代码非常相似。当我构建时,我得到以下错误:

Severity    Code    Description Project File    Line    Suppression State   Detail Description
Warning C6011   Dereferencing NULL pointer 'my_sock'.   Project3    C:Usersstuffsourcemain.c    33  

我将感谢任何建议,谢谢。

我为winsock添加了一个init函数。看来这就是问题所在,因为它现在建得很好。有人能证实吗?谢谢。

#define _CRT_SECURE_NO_WARNINGS
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x6000
#endif
#undef UNICODE
#define UNICODE
#undef _WINSOCKAPI_
#define _WINSOCKAPI_
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <stdlib.h>
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
#pragma comment(lib,"ws2_32.lib") //Winsock Library
struct the_socks
{
int sock_file_d;
struct sockaddr_in my_addr;
};
int  main()
{
WSADATA wsa;
printf("nInitialising Winsock...");
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
{
printf("Failed. Error Code : %d", WSAGetLastError());
return 1;
}
printf("Initialised.");

struct the_socks* my_sock;
int state = -1;
my_sock = (struct the_socks*)malloc(sizeof(struct the_socks));
struct sockaddr_in client_n, server_n;
if ((my_sock->sock_file_d = socket(AF_INET, SOCK_STREAM, 0)) >= 0)
{
state = 0;
}
//do other stuff
return 0;
}

最新更新