【发布时间】:2014-12-15 18:10:23
【问题描述】:
代码——主循环:
int handleClient (struct clientData* clientData)
{
void* Buffer = malloc (INET_BUFFER_SIZE); <-- VOID* BUFFER FOR RECV()
int listenSocket = clientData->listenSocket;
struct sockaddr_in clientAddress = clientData->clientAddress;
printf("Received connection from client %s:%d.\n", inet_ntoa(clientAddress.sin_addr), ntohs(clientAddress.sin_port));
while (1)
{
int packetSize;
if ((packetSize = recv(listenSocket, &Buffer, INET_BUFFER_SIZE, 0)) > 0)
{
if (packetSize == ECHO_SIZE)
{
handleEchoPacket(Buffer);
continue;
}
if (packetSize == MESSAGE_SIZE) <---THIS IS TRIGGERED BECAUSE OF PACKET SIZE
{
handleMessagePacket(Buffer);
continue;
}
}
}
代码——handleMessagePacket(void* Buffer):
void handleMessagePacket (void* Buffer)
{
void* localBuffer = (void*) malloc(INET_BUFFER_SIZE);
memcpy(localBuffer, Buffer, INET_BUFFER_SIZE); <--SEGFAULT
(...)
}
GDB -- 部分输出:
Program received signal SIGSEGV, Segmentation fault.
__memcpy_sse2_unaligned () (.....) <--Tells me it doesn't have source files, not relevant to the problem.
基本上,当我将一个内存块从 void 指针复制到本地缓冲区时,就会出现问题。两者都是相同类型的 malloc() 堆内存:void。 欢迎任何建议或cmets!
【问题讨论】:
-
你需要使用
recv(listenSocket, Buffer, INET_BUFFER_SIZE, 0);-- 在Buffer之前没有&。 -
我在 10 秒前确实意识到了这一点。这让我保持了一段时间。婴儿步。感谢您的回复!
标签: c segmentation-fault malloc memcpy