“地址0x7f越界”通过函数传递参数

时间:2012-08-08 07:56:33

标签: c pointers arguments

  

可能重复:
  Pass a buffer by reference to other function

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

当我执行temp = buffer时,会出现分段错误。在调试器中,我在缓冲区“Address 0x7f out of bounds”中看到。如何从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");

    }

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题。

  1. ast内,您可以多次访问*bufferlen,而无需先分配内存。
  2. 我想您要将分配给Bufferencode的内存移交给buffer,以便在ast之外使用您的语句buffer=Bufferencode;进一步使用。但是,这需要:

    void ast(KOCTET **buffer, ...)
    {
        ...
        *buffer = Bufferencode;
        ...
    }
    
    void dec()
    {
        KOCTET *buffer;
        ...
        ast_process_048(&buffer,...);
        ...
    }
    
  3. 这些只是第一个明显的问题 - 可能会有更多。考虑一下你昨天的问题答案中的建议,并且 - 可能 - 更多地了解一下基本的C编程和指针处理。