问题描述
我有一个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) { ///问题所在之处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);//为结构体nalu_t及其成员buf分配空间。返回值为指向nalu_t存储空间的指针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
这是为什么?是我使用的不对吗?求解各位大神。。
问题解答
回答1:逻辑完全有可能这样走的:
udp_client_t *udpClient = *data;if (udpClient){ udpClient->rtp_flag = 1; int ret = init_server(); if (ret < 0) {// 这里没执行 } rtp_cxt.nalu = alloc_nalu(MAX_FRAME_SIZE); if (!rtp_cxt.nalu) {// 这里没执行 }}else{ // 这里没执行}// 此时 udpClient->rtp_flag => 1 且返回值为 0return 0;
那么输出 1 和 0,有问题吗?