首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当数据为NULL时访问链接列表的数据元素时应用程序崩溃

当数据为NULL时访问链接列表的数据元素时应用程序崩溃
EN

Stack Overflow用户
提问于 2019-05-23 11:19:12
回答 1查看 105关注 0票数 0

我使用以下代码遍历目标c中的链接列表

代码语言:javascript
运行
复制
   const MSList *calls = linphone_core_get_calls(LC);
            if (calls == NULL)
            {
                                [self dismissCtrl];
                //how to check current is which screen is on
                //                while ((currentView == CallView.compositeViewDescription) ||
                //                       (currentView == CallIncomingView.compositeViewDescription) ||
                //                       (currentView == CallOutgoingView.compositeViewDescription)) {
                //                    [self popCurrentView];
                //                }

            } else {
                linphone_call_resume((LinphoneCall *)calls->data);
                while (calls)
                {

                    if(calls->data != NULL && calls->data != nil && calls->data != (__bridge void *)((id)[NSNull null]))
                    {
                        //crash
                    if (linphone_call_get_state((LinphoneCall *)calls->data) == LinphoneCallIncomingReceived ||
                        linphone_call_get_state((LinphoneCall *)calls->data) == LinphoneCallIncomingEarlyMedia) {
                        [self displayIncomingCall:(LinphoneCall *)calls->data];
                        break;
                    }
                   }
                    calls = calls->next;



                }

当整个列表不是空,但它的数据、前一个或下一个值为空时,应用程序就会崩溃。我添加了代码来检查数据是否为NULL,但如果数据(数据)为NULL,那么我将无法访问它,并且在其本身处于崩溃状态的情况下,应用程序将崩溃。如何防止这种情况发生?我已经为应用程序崩溃的位置和列表当时包含的值附加了屏幕快照。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-11 06:08:21

代码语言:javascript
运行
复制
if (calls == NULL) {
                [self dismissCtrl];
                //how to check current is which screen is on
                //                while ((currentView == CallView.compositeViewDescription) ||
                //                       (currentView == CallIncomingView.compositeViewDescription) ||
                //                       (currentView == CallOutgoingView.compositeViewDescription)) {
                //                    [self popCurrentView];
                //                }

            }
            else
            {

                size_t count = bctbx_list_size(calls);

                linphone_call_resume((LinphoneCall *)calls->data);


                int i = 0;

                while (calls )
                {


                    if(i < count)
{



                    if ( calls->data == (__bridge void *)((id)[NSNull null]) || calls->data == NULL || calls->data == nil )
                    {

                        return;
                    }


                    LinphoneCall *objCall =  (LinphoneCall *)calls->data;



                    LinphoneCallState state = (objCall != NULL) ? linphone_call_get_state(call) : 0;



                    if (state == LinphoneCallIncomingReceived ||
                        state == LinphoneCallIncomingEarlyMedia)
                    {
                        [self displayIncomingCall:(LinphoneCall *)calls->data];
                        break;
                    }

                    //calls ? calls->data : NULL
                   // calls =  calls ? calls->next : NULL;
                    calls = calls->next;
                        i = i+1;
                    }
                    else
                    {
                        break;
                    }
                }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56274086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档