objective-c - C語言在使用上遇到了一個結構體賦值失敗的問題?
天蓬老师
天蓬老师 2017-05-31 10:36:42
0
1
850

我有一個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 且返回值为 0 return 0;

那麼輸出 1 和 0,有問題嗎?

    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!