gpt4 book ai didi

c++ - std::copy 毫无异常(exception)地导致错误

转载 作者:太空狗 更新时间:2023-10-29 20:11:39 25 4
gpt4 key购买 nike

我有这段代码可以复制一个整数:

int parseInt(const char* data, unsigned int* ind) {
int i;

std::copy(&data[*ind], &data[*ind+sizeof(int)], &i); // i) STD::COPY
// memcpy(&i, &data[*ind], sizeof(int)); // ii) MEMCPY
std::cout << "--> " << i << std::endl;
*ind += sizeof(int);
std::cout << "OK" << std::endl;
return i;
}

debian 上,此代码有效 i) STD::COPY

然后,我在embedded Arm 上编译并运行了代码(sizeof(int) 也是4)。带有 i) 的代码似乎也在运行,在函数内打印预期的内容。

但是,当从函数返回时它会导致问题。

我也试过 return 1; 而不是 i,但都是一样的。它不抛出异常,不提供任何线索。我无法调试,因为我有限制,无法添加调试器。

它只是在这个函数之后不继续,即:

std::cout << "PARSING..." << std::endl;
parseInt(data, &ind);
std::cout << "PARSED!" << std::endl;
...

给出这个(值 11 是正确的):

PARSING...
--> 11
OK

然后进程卡住。

但是,当我使用 ii) MEMCPY 而不是 std::copy 时,代码可以正常工作。因此,在我看来,这个问题似乎是由于 std::copy 引起的。

有人知道这里会发生什么吗?

我是否错误地使用了 std::copy?但是,为什么它可以在 debian 桌面上运行,但不能在 arm embedded 上运行?

最佳答案

std::copy(&data[*ind], &data[*ind+sizeof(int)], &i);

这会将 sizeof(int) 字节复制到从 &i 开始的 int 数组的连续元素中,不用说这会导致未定义的行为因为 &i 没有数组。

你可能是说

std::copy(&data[*ind], &data[*ind+sizeof(int)], reinterpret_cast<char*>(&i));

memcpy 工作的原因是因为它显式地复制字节,std::copy 更通用,因为它在抽象迭代器上运行的其他标准算法一样,它取决于你要确保你正确地调用了它。

关于c++ - std::copy 毫无异常(exception)地导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32177015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com