带有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

我正要从一个名为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, 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);