类型转换(*void[]到向量C++)



在以下代码中:

// TODO: -- original 
// void *buf[n];   // <== no variable length arrays in (V)C++ 
// TODO: -- C++ 
// std::vector<void*> buf(n);
for(unsigned i=0; i<n; ++i)
buf[i] = tlsf_malloc(impl->tlsf, chunk_size);
bool outOfMem = false;
for(unsigned i=0; i<n; ++i)
outOfMem |= (buf[i] == nullptr);
for(unsigned i=0; i<n; ++i)
if(buf[i])
tlsf_free(impl->tlsf, buf[i]);

其中:

void* tlsf_malloc(tlsf_t tlsf, size_t size)
{
control_t* control = tlsf_cast(control_t*, tlsf);
const size_t adjust = adjust_request_size(size, ALIGN_SIZE);
block_header_t* block = block_locate_free(control, adjust);
return block_prepare_used(control, block, adjust);
}

static void* block_prepare_used(control_t* control, block_header_t* block, size_t size)
{
void* p = 0;
if (block)
{
block_trim_free(control, block, size);
block_mark_as_used(block);
p = block_to_ptr(block);
}
return p;
}

如何将*void[]转换为向量类型?我尝试过的:

std::vector<void*> buf(n);
for(unsigned i=0; i<n; ++i)
buf.push_back(tlsf_malloc(impl->tlsf, chunk_size));
bool outOfMem = false;
for(unsigned i=0; i<n; ++i)
outOfMem |= (buf[i] == nullptr);
for(unsigned i=0; i<n; ++i)
if(buf[i])
tlsf_free(impl->tlsf, buf[i]);
return outOfMem;

但我不确定释放buf[I]后tlsf_free((在内存中留下了什么。

只需将void *buf[n];替换为std::vector<void*> buf(n);。一切都应该正常。请勿使用push_back()

最新更新