做为参数传递出去前应该赋值buf* mybuf=NULL;

解决方案 »

  1.   

    c语言是传值调用的,改成
    void initbuf(buf** pbuf)
    {
      *pbuf=malloc(sizeof(buf));
      *pbuf->p=NULL;
      *pbuf->i=0
    }试一下
      

  2.   

    struct buf{ char* p;
                int i;}void initbuf(buf** pbuf)
    {
      *pbuf=malloc(sizeof(buf));
      *pbuf->p=NULL;
      *pbuf->i=0
    }main()
    {
      buf* mybuf;
      initbuf(&mybuf);
      ...
    }好了
      

  3.   

    关注。
    呵呵,为什么要buf** pbuf?各位大侠解释一下
      

  4.   

    对,是这个错。但我也不明白buf** pbuf 中两个*分别代表什么意思
      

  5.   

    很简单啊,你在void initbuf(buf* pbuf)里面对pbuf分配了内存,但是并没有返回到mybuf里面,所以用mybuf访问会非法。
      

  6.   

    **就是指针的指针啊
    或者写成
    struct buf{ char* p;
                int i;}buf* initbuf()
    {
      pbuf=malloc(sizeof(buf));
      pbuf->p=NULL;
      pbuf->i=0
    }main()
    {
      buf* mybuf;
      mybuf=initbuf();//warning
      ...
    }
      

  7.   

    **就是指针的指针啊
    或者写成
    struct buf{ char* p;
                int i;}buf* initbuf()
    {
      pbuf=malloc(sizeof(buf));
      pbuf->p=NULL;
      pbuf->i=0
    }main()
    {
      buf* mybuf;
      mybuf=initbuf();//warning
      ...
    }
      

  8.   

    **就是指针的指针啊
    或者写成
    struct buf{ char* p;
                int i;}buf* initbuf()
    {
      pbuf=malloc(sizeof(buf));
      pbuf->p=NULL;
      pbuf->i=0
    }main()
    {
      buf* mybuf;
      mybuf=initbuf();//warning
      ...
    }
      

  9.   

    这样不是更简单写吗....
    struct buf{ char* p;
                int i;}void initbuf(buf* pbuf)
    {
      pbuf=malloc(sizeof(buf));
      pbuf->p=NULL;
      pbuf->i=0
    }main()
    {
      buf mybuf;      //一定要定义成指针么?上面的说的都是对的。这样也没错
      initbuf(&mybuf);//warning
      ...
    }
      

  10.   

    在iknowabc的版本里:buf* mybuf;// mybuf是指向buf结构的指针变量,但是没初始化。
    /* cout << mybuf << endl; */initbuf(mybuf);// 由于是传值,所以只是简单的将这个未初始化
    //的,谁也不知道是什么的值传给pbuf.//在initbuf运行并且返回的过程中,pbuf得到了值,但是未能free,
    //留下了漏洞1。另外,pbuf的值没有传递会mybuf,所以mybuf还是
    //垃圾数据。
    /* cout << mybuf << endl; *///那么在随后的程序中使用mybuf这个没有初始化的buf*,出现内存错误
    //是肯定的了。//在liu_feng_fly,Kevin_qing的版本中,将此函数改造成为了传址。
    //因为你的参数是指针,所以只好使用指针的指针了。
    //如果用c++,可以用引用&。
      

  11.   

    to ydogg(灰毛兔):
    main()
    {
      buf mybuf;      //这里不分配内存吗
      initbuf(&mybuf);//这里又分配一次,原来的丢失
      ...
    }
      

  12.   

    to liu_feng_fly:
        buf mybuf;//这里怎么分配了内存呢?没有申请过空间吧
                  //如果有申请过,那末下一步就发生了泄漏
                  //char *p只是定义了一个指针而已如有错误,清指出。。感激~。
      

  13.   

    struct buf{ char* p;
                int i;}void initbuf(buf* pbuf)
    {
      pbuf=malloc(sizeof(buf));
      pbuf->p=NULL;
      pbuf->i=0
    }main()
    {
      buf* mybuf=new mybuf;
      initbuf(mybuf);//warning
      ...
    }
      

  14.   

    buf mybuf;//这里怎么分配了内存呢?没有申请过空间吧
                  //如果有申请过,那末下一步就发生了泄漏
                  //char *p只是定义了一个指针而已
    想一想,如果我写int a;//是否会分配内存呢???难道这时候a没被分配内存
                          //那当我a=5;的时候,5写到什么地方呢?
      

  15.   

    想一想,如果我写int a;//是否会分配内存呢???难道这时候a没被分配内存
                          //那当我a=5;的时候,5写到什么地方呢?
                          //int a ;会发生内存泄漏吗?
                          //char *p;只是定义了一个存放指针的空间,而并没有为它联系空间
      

  16.   

    内存泄漏在这里
    void initbuf(buf* pbuf)
    {
      pbuf=malloc(sizeof(buf));
      pbuf->p=NULL;
      pbuf->i=0
    }pbuf分配后指针丢失了
      

  17.   


    to  Kevin_qing(Kevin):回复人:Kevin_qing(Kevin) (2001-5-22 17:14:00)  得0分 
    **就是指针的指针啊
    或者写成
    struct buf{ char* p;
                int i;}buf* initbuf()
    {
      pbuf=malloc(sizeof(buf));
      pbuf->p=NULL;
      pbuf->i=0
    }main()
    {
      buf* mybuf;
      mybuf=initbuf();//warning
      ...
    }
    =============================================================你的 
    buf* initbuf()
    {
      pbuf=malloc(sizeof(buf));
      pbuf->p=NULL;
      pbuf->i=0
    }没有返回 buf* 呀!是否应当改成这样:
    buf* initbuf()
    {
      pbuf=malloc(sizeof(buf));
      pbuf->p=NULL;
      pbuf->i=0;
      return(pbuf);
    }
      

  18.   

    to :seedundersnow(&seedundersnow) 
    :P我不小心拷贝的时候忘了加return 了~~~哈哈哈