Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类型转换(*void[]到向量C++)_C++ - Fatal编程技术网

类型转换(*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;