带有c代码的分段错误:返回值
我正要从一个名为displaypcapStas()的函数返回无符号长数组:但我无法返回,我不知道发生了什么: 这是我的c代码:带有c代码的分段错误:返回值,c,sockets,malloc,swig,C,Sockets,Malloc,Swig,我正要从一个名为displaypcapStas()的函数返回无符号长数组:但我无法返回,我不知道发生了什么: 这是我的c代码: unsigned long * displaypcapStats() { int nBytes, testId, num_pcaps; char buffer[1024]; socklen_t addr_size; int index = 0, i, cmd_id, len, parLen, re
unsigned long * displaypcapStats()
{
int nBytes, testId, num_pcaps;
char buffer[1024];
socklen_t addr_size;
int index = 0, i, cmd_id, len, parLen, result;
char pcapname[256];
int statNum1 = 0;
unsigned long *pcapstats;
unsigned long *value;
unsigned long tx_pkts, tx_bytes, rx_pkts, rx_bytes, tx_pkts_op, tx_bytes_op, rx_pkts_op, rx_bytes_op;
int east_west, west_east, err_pkts;
int passvalue = 0;
//Create UDP socket clientSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
//Configure settings in address struct
bzero((char *) &serverAddr, sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(ATICARA_AUTO_PORT);
//inet_aton(host, &serverAddr.sin_addr);
inet_aton(getenv(ATICARA_HOST_IP), &serverAddr.sin_addr);
//Initialize size variable to be used later on
addr_size = sizeof(serverAddr);
buffer[index++] = ((tid>>8)&0xff);
buffer[index++] = tid & 0xff;
buffer[index++] = ((DISPLAY_PCAP_STATS >> 8) & 0xff);
buffer[index++] = DISPLAY_PCAP_STATS & 0xff;
//Send message to server
sendto(clientSocket,buffer,index,0,(struct sockaddr *)&serverAddr,addr_size);
//Receive message from server for num of pcaps
nBytes = recvfrom(clientSocket,buffer,BUFSIZE,0,(struct sockaddr *)&serverAddr, &addr_size);
printf("Received Pcap Stats successfull:%d\n", nBytes);
tid = ((buffer[0] << 8) & 0xff00) | (buffer[1] & 0xff);
result = ((buffer[2] << 8) & 0xff00) | (buffer[3] & 0xff);
if (result == 1){
index = 3;
num_pcaps = ((buffer[++index] << 8) & 0xff00) | (buffer[++index] & 0xff);
printf("\nNumber of pcaps: %d\n", num_pcaps);
pcapstats = malloc(8*num_pcaps*sizeof(unsigned long));
for(i = 0; i < num_pcaps; i++) {
tx_pkts = (((uint64_t)buffer[++index] << 56) & 0xff00000000000000) |
(((uint64_t)buffer[++index] << 48) & 0xff000000000000) |
(((uint64_t)buffer[++index] << 40) & 0xff0000000000) |
(((uint64_t)buffer[++index] << 32) & 0xff00000000) |
(((uint64_t)buffer[++index] << 24) & 0xff000000) |
(((uint64_t)buffer[++index] << 16) & 0xff0000) |
(((uint64_t)buffer[++index] << 8) & 0xff00) |
((uint64_t)buffer[++index] & 0xff);
printf("%ld ", tx_pkts);
tx_bytes = ...
pcapstats[statNum1++] = tx_pkts;
pcapstats[statNum1++] = tx_bytes;
pcapstats[statNum1++] = rx_pkts;
pcapstats[statNum1++] = rx_bytes;
pcapstats[statNum1++] = tx_pkts_op;
pcapstats[statNum1++] = tx_bytes_op;
pcapstats[statNum1++] = rx_pkts_op;
pcapstats[statNum1++] = rx_bytes_op;
}
pcapstats[statNum1++] = '\0';
printf("Pcap stats Display Successfull:%d\n",nBytes);
return(pcapstats);
}
else {
printf("\nPcap stats Display Unsuccessfull!:%d",nBytes);
*value = buffer[3];
return value;
}
}
unsigned long*displaypcapStats()
{
int n字节,testId,num_pcaps;
字符缓冲区[1024];
袜子尺寸;
int index=0,i,cmd_id,len,parLen,result;
char pcapname[256];
int statNum1=0;
无符号长*pcapstats;
无符号长*值;
无符号长tx_pkts、tx_字节、rx_pkts、rx_字节、tx_pkts_op、tx_字节_op、rx_pkts_op、rx_字节_op;
内东西、西东、厄尔西;
int passvalue=0;
//创建UDP套接字clientSocket=socket(AF_INET、SOCK_DGRAM、IPPROTO_UDP);
//在地址结构中配置设置
bzero((char*)&serverAddr,sizeof(serverAddr));
serverAddr.sin_family=AF_INET;
serverAddr.sin\u port=htons(ATICARA\u自动\u端口);
//inet_aton(主机和服务器地址单地址);
inet_aton(getenv(ATICARA_HOST_IP)和serverAddr.sin_addr);
//初始化稍后使用的大小变量
addr_size=sizeof(serverAddr);
缓冲区[index++]=((tid>>8)和0xff);
缓冲区[index++]=tid&0xff;
缓冲区[索引++]=(显示PCAP统计数据>>8)和0xff);
缓冲区[index++]=显示PCAP统计数据&0xff;
//向服务器发送消息
sendto(clientSocket,buffer,index,0,(struct sockaddr*)和serverAddr,addr\u size);
//从服务器接收PCAP数量的消息
nBytes=recvfrom(clientSocket,buffer,BUFSIZE,0,(struct sockaddr*)和serverAddr,&addr\u size);
printf(“已成功接收Pcap统计信息:%d\n”,n字节);
tid=((缓冲区[0]您正在修改索引
两次:
num_pcaps=((buffer[++index]请给出一个最小的示例;没有人会读这个。请发布一个。至少添加实际的输出并标记行pythonFunctions.c:1117
。也可以作为@klas Lineback:hi在num_pcaps=(buffer[++index]@AdarshaVerma之前查看)的副本关闭。如果((buffer[++index]),你错了@CareyGregory|
不会短路,此代码始终执行两个递增表达式(因此是未定义的行为)@M.M你说得对,我站在更正位置。@AdarshaVerma请阅读
num_pcaps = ((buffer[++index] << 8) & 0xff00) | (buffer[++index] & 0xff);