有时,下面的代码会起作用,这可能意味着概念很好,但执行很差。由于这取决于钻头掉落的位置而崩溃,这意味着我正在一路杀戮。我有兴趣找到一种优雅的方式来填充bufferdata
<=4096 字节buffer
,但不可否认,这不是它。
编辑:我收到的错误是对缓冲区数据的非法访问
unsigned char buffer[4096] = {0};
char *bufferdata;
bufferdata = (char*)malloc(4096 * sizeof(*bufferdata));
if (! bufferdata)
return false;
while( ... )
{
// int nextBlock( voidp _buffer, unsigned _length );
read=nextBlock( buffer, 4096);
if( read > 0 )
{
memcpy(bufferdata+bufferdatawrite,buffer,read);
if(read == 4096) {
// let's go for another chunk
bufferdata = (char*)realloc(bufferdata, ( bufferdatawrite + ( 4096 * sizeof(*bufferdata)) ) );
if (! bufferdata) {
printf("failed to realloc\n");
return false;
}
}
}
else if( read<0 )
{
printf("error.\n");
break;
}
else {
printf("done.\n");
break;
}
}
free(bufferdata);