-2

可能重复:
通过引用其他函数来传递缓冲区

当我调用函数 ast 时,它将数据保存在 buffer 和 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");

    }
4

1 回答 1

1

您的代码有几个问题。

  1. ast您内部访问*bufferlen多次,而之前没有分配内存。
  2. 我想您想将分配给Bufferencodeto的内存交给您的语句以buffer供进一步使用。但是,这将需要:astbuffer=Bufferencode;

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

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

于 2012-08-08T08:19:10.093 回答