为什么我的结构分配在C语言中失败?

时间:2017-05-23 07:08:11

标签: objective-c c

为什么我的结构分配在C语言中失败? 我有一个A类:定义一个结构

typedef struct{
    int sockfd;
    on_av_frame_cb av_frame_cb;
    on_av_frame_cb rtp_cb;
    on_error_cb error_cb;
    uint8_t *p_buf;
    uint8_t *v_buf;
    uint8_t *a_buf;
    int  rtp_flag;
}udp_client_t;

然后我打电话给B班:

static udp_client_t client;
int jldv_create_client(int src_port,int port ,const char *dst_ip){


udp_client_t *udpClient = &client;

assert(udpClient != NULL);
const char *c_ip = dst_ip;

memset(udpClient, 0, sizeof(udp_client_t));

int ret = create_client(src_port, port, c_ip, &udpClient);

if (ret != 0) {

    goto err_output;
}

udpClient->av_frame_cb = (on_av_frame_cb )onVideoFrame;
udpClient->error_cb = on_error;



if (rtp_create(&udpClient) < 0) { ///above problem
    goto err_output;
}

printf("rtp_client:%d \n",udpClient->rtp_flag);
return 0;

err_output:
destroy_client(udpClient);
return -1;

}

在上面的问题中,我使用了C类方法:

int rtp_create(udp_client_t **data)
{
    logi("%s", __func__);

    udp_client_t *udpClient = *data;
    if(udpClient)
    {

        udpClient->rtp_flag = 1;


        memset(&rtp_cxt, 0, sizeof(rtp_context_t));
        int ret = init_server();
        if (ret < 0)
        {
            return -1;
        }
        rtp_cxt.nalu = alloc_nalu(MAX_FRAME_SIZE);//
        if (!rtp_cxt.nalu)
        {
            loge("alloc nalu failed");
            return -2;
        }
    }
    else
    {
        loge("%s: data is null", __func__);
        return -3;
    }

    printf("udpClient after==>%d \n",udpClient->rtp_flag);
    return 0;
}

但是,打印结果是:

udpClient after==>1 
rtp_client:0 

补充:

int create_client(int src_port, int dst_port, const char *dst_ip, udp_client_t **client)
{
  udp_client_t *udpClient = *client;
  assert(udpClient != NULL);
  memset(udpClient, 0, sizeof(udp_client_t));

  printf("create_client:%p\n",udpClient);

  udpClient->port = src_port;

  if (pthread_create(&udpClient->recv_tid, NULL, udp_receiver_runnable, (void *) udpClient) != 0)
  {
    loge("Failed to start new thread");
    goto err_output;
  }
  return 0;
  err_output:
  memset(udpClient, 0, sizeof(udp_client_t));
  return -10;
}

为什么?我用错了什么?

0 个答案:

没有答案