Chinaunix

标题: 不是蛋疼,而是真遇到是三级指针的问题 [打印本页]

作者: RUNONMIPS    时间: 2013-01-11 20:20
标题: 不是蛋疼,而是真遇到是三级指针的问题
程序调用逻辑是这样:

int func2(char ***fbuf2) {
    char data[100];
//data[]赋值操作
    memcpy((**fbuf2), data, 100);
}

int func1(char **fbuf1) {
   func2(&(*fbuf1));
}

int main() {
...
char *tmpbuf = (char *)malloc(100);
if(tmpbuf == NULL) {
  return;
}
func1(&tmpbuf);
}

func2中的赋值该怎么写,上面的写法不对,执行的时候段错误,,现在脑子浆糊了。再次声明我不是闲得蛋疼搞这么个问题,,而是实际中需要这么操作,,望大家赐教一下下。。
作者: hellioncu    时间: 2013-01-11 20:23
从你这些代码看,连两级指针都不需要用
作者: RUNONMIPS    时间: 2013-01-11 20:26
这个调用过程是不能改的。。该怎么弄。。回复 2# hellioncu


   
作者: captivated    时间: 2013-01-11 20:30

从LZ的函数逻辑来看, 一级指针就够用了.

int func2(void *buf)
{
    char data[100];

    memcpy(buf, data, 100);
}

int func1(void *buf)
{
    func2(buf);
}

int main(void)
{
    char *buf = malloc(100);

    func1(buf);

    free(buf);
}
作者: RUNONMIPS    时间: 2013-01-11 20:36
这样不行的,段错误。。回复 4# captivated


   
作者: captivated    时间: 2013-01-11 20:54
回复 5# RUNONMIPS


    我的那段会段错误? 确定吗{:3_182:}

作者: pmerofc    时间: 2013-01-11 21:06
提示: 作者被禁止或删除 内容自动屏蔽
作者: nketc    时间: 2013-01-11 21:39
RUNONMIPS 发表于 2013-01-11 20:36
这样不行的,段错误。。回复 4# captivated


lz怪叔叔木有错。是你已步入魔道。
作者: timothyqiu    时间: 2013-01-11 21:45
本帖最后由 timothyqiu 于 2013-01-11 21:45 编辑
  1. int func2(char ***fbuf2) {
  2. ...
  3. }
  4. int func1(char **fbuf1) {
  5.    func2(&(*fbuf1)); /* 写 &(*fbuf1) 和写 fbuf1 一样*/
  6. }
复制代码
你的 func2 要的是 char ***,你传给它的是 char **……
作者: cokeboL    时间: 2013-01-11 22:21
别以为写的代码看上去难度大就是牛逼,有一种设计叫过渡设计




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2