【发布时间】:2015-08-24 07:52:01
【问题描述】:
我有这个代码来复制一个整数:
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 上运行呢?
【问题讨论】:
-
我不确定,但取消对过去指针的引用对我来说似乎很可疑。为什么不
std::copy(data + *ind, data + *ind+sizeof(int), &i)? -
@melak47 不一样?反正我试过了。但没有机会。
标签: c++ embedded-linux