我是 C 的初学者,我有一个错误,下面的代码在某些时候会在运行时停止应用程序。
int l = 0;
//block 1
char *primaryIPaddr;
unsigned char *primaryIPaddrSize;
primaryIPaddrSize = *(unsigned char *) &msg[l++];
AddToLog(logInfo, "PrimarySize: %u\n", primaryIPaddrSize);
if(primaryIPaddrSize != NULL) {
memcpy ( primaryIPaddr, &msg[l], primaryIPaddrSize );
AddToLog(logInfo, "PrimaryAddr: %s\n", primaryIPaddr);
l += primaryIPaddrSize;
}
//block 2
char *secondaryIPaddr;
unsigned char *secondaryIPaddrSize;
secondaryIPaddrSize = *(unsigned char *) &msg[l++];
AddToLog(logInfo, "secondarySize: %u\n", secondaryIPaddrSize);
if(secondaryIPaddrSize != NULL) {
memcpy ( secondaryIPaddr, &msg[l], secondaryIPaddrSize );
AddToLog(logInfo, "secondaryAddr: %s\n", secondaryIPaddr);
l += secondaryIPaddrSize;
}
//block 3
unsigned int *primaryPort;
unsigned int *secondaryPort;
primaryPort = *(unsigned int *) &msg[l++];
AddToLog(logInfo, "primaryPort: %u\n", primaryPort);
secondaryPort = *(unsigned int *) &msg[l++];
AddToLog(logInfo, "secondaryPort: %u\n", secondaryPort);`
msg 变量是一个由 UDP 数据包填充的字符,我不知道我的代码有什么问题,但是当进程到达块 2 时它就停止了,听起来像是内存问题,因为我删除了块 1 并前进l 变量到块2的确切点,块2正确处理和转储,就像块2停止进程之前的块1一样。所以代码本身没问题,好像我没有正确分配内存,我尝试使用malloc,但没有做任何效果,我不知道我做错了什么,有人知道答案这里会发生什么?
UDP数据包是这样来的:
UINT8 primaryIPaddrSize;
UINT8* primaryIPaddr; primaryIPaddrSize bytes
UINT8 secondaryIPaddrSize;
UINT8* secondaryIPaddr; secondaryIPaddrSize bytes
UINT16 primaryIPport;
UINT16 secondaryIPport`
secondaryIp 它是可选的,所以如果secondaryIPaddrSize 为空,那么我必须跳转secondaryIPaddr。`