Possible Duplicate:
Pass a buffer by reference to other function




当我调用函数ast时,它会将数据保存在缓冲区和bufferlen中,但是我尝试从dec访问此指针,并且可以打印* bufferlen,但是* buffer是不可能的。

当我执行temp = buffer时,出现分段错误。并且在调试器中,我在缓冲区“地址0x7f越界”中看到。如何从dec打印缓冲区?哪个错误?

  void ast(KOCTET *buffer,KUINT16 *bufferlen){
        KOCTET  *Bufferencode,*temp;
        KUINT16 BufferSize=5000;
        KUINT16 WritePos=0;
        KUINT16 total_bytes;
        Bufferencode=(KOCTET*)malloc(5000*sizeof(KOCTET));
        memset(Bufferencode,0,sizeof(Bufferencode));

        total_bytes = stream.CopyIntoBuffer( Bufferencode, BufferSize, WritePos);

        buffer=Bufferencode;
        *bufferlen=total_bytes;

        int z=0;
        temp=buffer;
        while (z<(*bufferlen)){
           printf(" %02X",(unsigned char)*temp);
           temp++;
           z++;
        }
        printf("\n");

    }


    void dec()
    {
       KOCTET *buffer,*temp;
       KUINT16 *bufferlen;

       ast_process_048(buffer,bufferlen);


       int z=0;
       temp=buffer;
       while (z<(*bufferlen)){
         printf(" %02X",(unsigned char)*temp);
         temp++;
         z++;
       }
       printf("\n");

    }

最佳答案

您的代码有几个问题。


ast中,您可以多次访问*bufferlen,而之前没有为其分配内存。
我想您想通过语句Bufferencode将分配给buffer的内存移交给ast以便在buffer=Bufferencode;之外进一步使用。但是,这将需要:

void ast(KOCTET **buffer, ...)
{
    ...
    *buffer = Bufferencode;
    ...
}

void dec()
{
    KOCTET *buffer;
    ...
    ast_process_048(&buffer,...);
    ...
}



这些只是第一个明显的问题-可能还会更多。考虑一下昨天问题的答案中的建议,并且-也许-了解更多有关基本C编程和指针处理的知识。

09-12 06:54