Mer*_*tce 3 c++ embedded-linux
我有这个代码来复制一个整数:
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;
}
Run Code Online (Sandbox Code Playgroud)
在debian这段代码工作没有有问题的我)的std :: COPY.
然后,我编译并运行嵌入式Arm上的代码(sizeof(int)也是4).带有i)的代码似乎也在运行,在函数内打印预期.
但是,从函数返回时会导致问题.
我也试过return 1;而不是i,但同样的.它没有抛出异常,也没有给出任何线索.我无法调试,因为我无法添加调试器,因为我有限制.
它只是在这个功能之后才会继续,即:
std::cout << "PARSING..." << std::endl;
parseInt(data, &ind);
std::cout << "PARSED!" << std::endl;
...
Run Code Online (Sandbox Code Playgroud)
给出这个(值11是正确的):
PARSING...
--> 11
OK
Run Code Online (Sandbox Code Playgroud)
然后这个过程冻结了.
但是,当我使用ii)MEMCPY代替时std::copy,代码可以工作.因此,这个问题在我看来是因为std::copy.
有谁知道这里可以发生什么?
我std::copy错误地使用了吗?但那么为什么它适用于debian桌面而不是arm on embedded?
std::copy(&data[*ind], &data[*ind+sizeof(int)], &i);
Run Code Online (Sandbox Code Playgroud)
这将sizeof(int)字节复制到int数组的连续元素开始&i,不用说这导致未定义的行为,因为没有数组&i.
你可能意味着
std::copy(&data[*ind], &data[*ind+sizeof(int)], reinterpret_cast<char*>(&i));
Run Code Online (Sandbox Code Playgroud)
之所以memcpy有效,是因为它显式地复制了字节,std::copy就像它在抽象迭代器上运行的其他标准算法一样,这取决于你确保正确调用它.
| 归档时间: |
|
| 查看次数: |
724 次 |
| 最近记录: |