使用自动参数 munmap_chunk() 返回自动的函数:无效指针

2023-12-29

我正在测试新功能 https://stackoverflow.com/questions/25879705/is-auto-as-a-parameter-in-a-regular-function-a-gcc-4-9-extension对于 GCC 4.9(参数为 auto)并遇到一些奇怪的错误。

#include <iostream>
#include <vector>

auto foo(auto v)
{
    for (auto&& i : v)
        std::cout << i;
}

int main()
{
    foo(std::vector<int>{1, 2, 3});
}

这给了我以下错误:

*** glibc detected *** ./a.out: munmap_chunk(): invalid pointer: 0x00007f87f58c6dc0 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x7e846)[0x7f87f4e4c846]
./a.out[0x400803]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x7f87f4def76d]
./a.out[0x400881]

另外,如果我这样做return 0 I get:

main.cpp: In instantiation of 'auto foo(auto:1) [with auto:1 = std::vector<int>]':
main.cpp:13:34:   required from here
main.cpp:8:12: error: could not convert '0' from 'int' to 'std::vector<int>'
     return 0;

看起来很奇怪,这两台汽车被推断为相同。我可以做什么来修复?


请注意,以下工作正常:

auto foo(auto v)
{
    return 'a';
}

int main()
{
    char c = foo(42);
}

我的测试似乎表明指针导致返回类型和 v 被推导为相同。例如int* and make_unique<int>(42)。然而,向量是会产生错误的。


我不认为范围类型可以通过这种方式推断出来 – sp2danny

我相信使用auto就像这样调用旧的auto meaning
(据我所知,在这种情况下auto=int, and int无法转换为std::vector http://www.cplusplus.com/reference/vector/vector/vector/).


目前它可以在 lambda 中使用

[](const auto& v)->void{for(auto&&i:v) std::cout<<i;}

但我认为这种情况下最好的解决方案是编写一个模板

template<typename T>
void foo(const T& t){
    for (auto&& i : t)
        std::cout << i;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用自动参数 munmap_chunk() 返回自动的函数:无效指针 的相关文章

随机推荐