【问题标题】:SIGSEGV Error occurs on the actual device but not on ios simulatorSIGSEGV 错误发生在实际设备上,但不在 ios 模拟器上
【发布时间】:2013-04-16 19:49:49
【问题描述】:

我是名为 CountdownCenter 的 cydia 插件的开发者。我试图为我的小部件创建一个数字时钟外观,所以我创建了一个示例应用程序,可以完美地做到这一点。完成此操作后,我将此数据传输到我的调整代码中,但这会导致我的 iPhone 上的 SIGSEGV 崩溃。经过一些测试,我找到了导致崩溃的部分,但我只是找不到问题所在,因为这部分可以在普通应用程序上运行。你能帮帮我吗?

代码如下:

int digitarray[10];
    int c = 0;
    digitarray[0] = 0;
    digitarray[1] = 0;
    while (secon>0) {
        int digitt = secon % 10;
        digitarray[c] = digitt;
        secon /= 10;
        c++;
    }
        lbl.text = [NSString stringWithFormat:@"%d", digitarray[0]];
          [self selectimage:digitarray[0] img:numview10];

【问题讨论】:

    标签: ios crash uiimageview nsarray segmentation-fault


    【解决方案1】:

    SIGSEGV 通常表示您正在尝试访问内存,但不允许您访问。 (顺便说一句,您是否使用发布版本对此进行测试?)也许 f.e.这里(也有其他类似的地方):

    c = 0;
    while (secon>0) {
        int digitt = secon % 10;
        digitarray[c] = digitt;
        secon /= 10;
        c++;
    }
    

    有一些可能性:

    • secon(可怕的变量名顺便说一句...)是 floatdouble,在这种情况下,while loop 要么永远不会输入,要么永远不会离开
    • c 变得如此之大,超出了digitarray 的界限

    为了解决这个问题,我建议在代码开头设置断点并逐步检查。

    【讨论】:

    • 嘿,谢谢,事实证明你是对的,有不止一个错误,但最重要的是它超出了范围。现在,你能再帮我一次吗?每次秒从 0 到 9 时都会发生 SIGABRT 错误(数字从 60 到 0 每秒减少 1,但每次它进入一组新的 10 个数字时,它会与 SIGABRT 一起崩溃,为什么?我会为你编辑查看更新的代码。顺便说一下,我在标签中看到的文字是正确的,这就是为什么整个事情有点奇怪......
    • (c 和数组在方法中被初始化,因为它们实际上不需要像在原始代码中那样是全局的)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多