0
我試圖分配一些內存爲我的數據結構(您可以通過因特網分組數據),但我所面臨的問題,我的程序只是停止,當它來回第二個循環。第一個循環變得完美,結構中的所有數據都是正確的。下面是代碼:ReAlloc如果終止程序上的第二循環
struct ipOut *ipHeadr = NULL;
struct ipAddr *addrHeadr = NULL;
struct hexOut *hexHeadr = NULL;
struct icmpOut *icmpHeadr = NULL;
struct igmpOut *igmpHeadr = NULL;
struct tcpOut *tcpHeadr = NULL;
struct udpOut *udpHeadr = NULL;
int main() {
ipHeadr = (struct ipOut*)malloc(sizeof(ipHeadr));
addrHeadr = (struct ipAddr*)malloc(sizeof(addrHeadr));
hexHeadr = (struct hexOut*)malloc(sizeof(hexHeadr));
icmpHeadr = (struct icmpOut*)malloc(sizeof(icmpHeadr));
igmpHeadr = (struct igmpOut*)malloc(sizeof(igmpHeadr));
tcpHeadr = (struct tcpOut*)malloc(sizeof(tcpHeadr));
udpHeadr = (struct udpOut*)malloc(sizeof(udpHeadr));
struct sockaddr saddr;
unsigned char *buff = (unsigned char *)malloc(65536);
int sock = socket(AF_INET , SOCK_RAW , IPPROTO_TCP);
if (sock < 0){
printf ("Error creating socket");
return 1;
}
int loop = 1;
while (loop == 1){
int saddrLength = sizeof saddr;
rawData = recvfrom(sock, buff, 65536, 0, &saddr, &saddrLength);
printf("raw data %d\n", rawData);
if(rawData <0)
{
printf("Failed to get packets\n");
return 1;
}
gettingPacket(buff, rawData);
}
return 0;
}
void gettingPacket(unsigned char * buff, int data){
packetNum++;
ipHeadr = (struct ipOut*)realloc(ipHeadr, sizeof(ipHeadr)*packetNum);
addrHeadr = (struct ipAddr*)realloc(addrHeadr,sizeof(addrHeadr)*packetNum);
hexHeadr = (struct hexOut*)realloc(hexHeadr, sizeof(hexHeadr)*packetNum);
struct iphdr *iph = (struct iphdr*)buff;
switch (iph -> protocol)
{
case 1:
icmpNum++;
icmpHeadr = (struct icmpOut*)realloc(icmpHeadr, sizeof(icmpHeadr)*icmpNum);
icmpOutput(buff, data);
hexDataOut(buff, data);
break;
case 2:
igmpNum++;
igmpHeadr = (struct igmpOut*)realloc(igmpHeadr,sizeof(igmpHeadr)*igmpNum);
igmpOutput(buff, data);
hexDataOut(buff, data);
break;
case 6:
tcpNum++;
tcpHeadr = (struct tcpOut*)realloc(tcpHeadr,sizeof(tcpHeadr)*tcpNum);
tcpPacketOutput(buff, data);
hexDataOut(buff, data);
break;
case 17:
udpNum++;
udpHeadr = (struct udpOut*)realloc(udpHeadr, sizeof(udpHeadr)*udpNum);
udpPacketOutput(buff, data);
hexDataOut(buff, data);
break;
}
}
調試告訴代碼將停止在這條線:
ipHeadr = (struct ipOut*)realloc(ipHeadr, sizeof(ipHeadr)*packetNum);
我認爲有內存泄漏的地方,但我不能找到它。
提示'type * pointer = malloc(sizeof(* pointer));','sizeof(pointer)'是指針大小。 'sizeof(Type)'或'sizeof(* pointer)'是類型大小。 – BLUEPIXY
不要投放'malloc'和朋友的結果! – Olaf
謝謝,它工作,我是白癡。 ) –