ios下指针操作的疑惑? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
GalvinZhao
V2EX    C

ios下指针操作的疑惑?

  •  
  •   GalvinZhao 2014-01-10 11:07:18 +08:00 2355 次点击
    这是一个创建于 4361 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在做一个字符串处理方法时候,用到了strsep()这个方法,ios 5下正常,ios 7 下报错,
    加入方法的源码,发现在指针的操作处报错,EXC_BAD_ACCESS,百撕不得其姐啊

    伪码说明下
    strsep(char **stringp, const char *delim){
    char *s
    s = *stringp
    s ++; //之前有++的动作
    s[-1] = 0; //这里错误怎么理解?
    }

    尝试了其他方法,应该对这个内存操作就会报错
    void func(char *read){
    char *q;
    q = read;
    for (;*q != 0; q++){
    if (*q == '|') {
    *q = '\0'; //这里会出错
    }
    }
    }
    不知道这个错误该如何理解?
    11 条回复    2014-07-01 11:43:54 +08:00
    fangzhzh
        1
    fangzhzh  
       2014-01-10 11:44:54 +08:00
    analyze一下, 编译器升级了后 ,有的以前的warning,就直接给你认为是bug了.
    guoxx_
        2
    guoxx_  
       2014-01-10 13:37:10 +08:00
    lz能贴一下调用地方的代码吗?
    从上面的代码来看,应该是调用的char *read所在的段不可写
    fangzhzh
        3
    fangzhzh  
       2014-01-10 14:03:03 +08:00
    @guoxx_ ios5 正常哦~~~
    GalvinZhao
        4
    GalvinZhao  
    OP
       2014-01-10 17:15:32 +08:00
    @fangzhzh 做过了,这段代码没有发现问题
    GalvinZhao
        5
    GalvinZhao  
    OP
       2014-01-10 17:23:17 +08:00
    @guoxx_
    int func(char *read){
    //a的值是"abcd|@12345|@efgh|67890"
    char *q;
    q = a;
    while (strsep(&q, symbol));
    }
    GalvinZhao
        6
    GalvinZhao  
    OP
       2014-01-10 17:24:54 +08:00
    @guoxx_q = a; 错了,因该是q = read;
    GalvinZhao
        7
    GalvinZhao  
    OP
       2014-01-10 17:30:3 +08:00
    @fangzhzh
    调用这个func的方法是
    func((char *)[parameter cStringUsingEncoding:NSASCIIStringEncoding],recv,result,"|");
    parameter也就是read
    是 .pch 宏字符串
    guoxx_
        8
    guoxx_  
       2014-01-10 18:30:26 +08:00
    .pch的宏的话是NSConstantstring, 这个应该就是导致你不能修改这部分内存的原因。
    换成动态创建内存的方式
    [NSString stringWithString:parameter]或者[NSMutableString stringWithString:parameter]
    nil
        9
    nil  
       2014-01-10 22:18:24 +08:00
    擦,你确定你在做iOS?
    lalawue
        10
    lalawue  
       2014-01-11 00:26:13 +08:00
    楼主那么好的 iOS NSString 类型不用干嘛。。。底层的事情就交给底层去做吧,因为这种错误也许在不同的设备以及平台上原因都有可能不同;如果只是纯研究的话请无视
    wezzard
        11
    wezzard  
       2014-07-01 11:43:54 +08:00
    @lalawue 我曾天真地以自己用C理字符串比比NSString快,果我了,可能主正在路上。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1301 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 17:05 PVG 01:05 LAX 09:05 JFK 12:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86