当我调用函数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");
}
答案 0 :(得分:1)
您的代码存在一些问题。
ast
内,您可以多次访问*bufferlen
,而无需先分配内存。我想您要将分配给Bufferencode
的内存移交给buffer
,以便在ast
之外使用您的语句buffer=Bufferencode;
进一步使用。但是,这需要:
void ast(KOCTET **buffer, ...)
{
...
*buffer = Bufferencode;
...
}
void dec()
{
KOCTET *buffer;
...
ast_process_048(&buffer,...);
...
}
这些只是第一个明显的问题 - 可能会有更多。考虑一下你昨天的问题答案中的建议,并且 - 可能 - 更多地了解一下基本的C编程和指针处理。