0

以下のコードは、 のポインタを格納していますtmpbuffer。/を使用せtmpbufferずに、ポインターではなくそれ自体を配列に格納するにはどうすればよいですか?fwBuffermallocfree

short int *fwBuffer[1000000];

size =  sizeof(short int)*length*inchannels;
short int *tmpbuffer = (short int*)malloc(size);

int count = 0;
for (count = 0; count < length*inchannels; count++)
{
    tmpbuffer[count] = (short int) (inbuffer[count]);
}

fwBuffer[saveBufferCount] = tmpbuffer;
4

2 に答える 2

1
short int *fwBuffer[1000000];

1000000タイプのポインタの配列ですshort int
ポインタ自体は、有効なオブジェクト(この場合はタイプのオブジェクト)に属する有効なメモリを指している場合を除いて、役に立ちませんshort int

このコードは、に十分なメモリを割り当ててshort intから、そのポインタを配列に配置するため、配列が便利になります。アイテムが必要であり1000000、それらをスタックに割り当てるとスタックスペースが不足する可能性があるため、これを行うのは正しい方法です。

于 2012-06-07T03:14:16.207 に答える
0

あなたはこのようなことをしたいと思っていますか?これにより、保存されているすべてのバッファが1つのバッファに集約されます。インデックスを保存するための個別のバッファがあることに注意してください。これは必要ないかもしれませんし、理論的にはfwBuffer配列の場所にパックすることもできます。

// Max number of data chunks
const unsigned maxBuffers = 1024;
// All the data stored here.
short int fwBuffer[1000000];
// how many data chunks we have
unsigned saveBufferCount = 0;
// Index to find each data chunk
// bufferIndex[saveBufferCount] points to where the next buffer will be placed (i.e. _after_ all the stored data).
short int* bufferIndex[maxBuffers] = {fwBuffer};

void storeBuffer(unsigned length, unsigned inchannels, short int* inbuffer)
{    
        short int *bufferIterator = bufferIndex[saveBufferCount];
        // Could do a memcpy here.
        int count = 0;
        for (count = 0; count < length*inchannels; count++)
        {
            *bufferIterator++ = inbuffer[count];
        }       
        ++saveBufferCount;
        bufferIndex[saveBufferCount] = bufferIterator;
}
于 2012-06-07T03:45:16.357 に答える