类型转换(*void[]到向量C++)
在以下代码中:类型转换(*void[]到向量C++),c++,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 =
// 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[]转换为向量类型?我尝试的是:
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 bufn;。一切都会好起来的。不要使用推回键。只需替换void*buf[n];使用std::vector bufn;。一切都会好起来的。不要使用push_-back。你可以按照Eugene的建议做,你的程序应该和以前一样做-但是如果你称tlsf_为free,我怀疑你的void*ers指向的内存应该被视为禁区。你能链接到那个电话的文档页面吗?我刚找到我认为你使用的代码。你不能像我怀疑的那样在tlsf_释放后使用内存。在调用tlsf_free之前,您也不必执行ifbuf[i],因为函数所做的第一件事就是if!ptr返回;。我还为tlsf C函数做了一个小的修改,可能会派上用场。你可以按照尤金的建议去做,你的程序也应该像以前一样去做——但是如果你称tlsf_为free,我怀疑你的空虚者指向的内存应该被视为禁区。你能链接到那个电话的文档页面吗?我刚找到我认为你使用的代码。你不能像我怀疑的那样在tlsf_释放后使用内存。在调用tlsf_free之前,您也不必执行ifbuf[i],因为函数所做的第一件事就是if!ptr返回;。我还为tlsf C函数做了一个小的修改,可能会派上用场。这应该有助于让记忆变得更容易。
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;
}
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;