【发布时间】:2020-04-24 10:57:03
【问题描述】:
我有一个可以在两种变体中调用的函数。 第一个工作正常,但第二个给出了读取访问冲突。
不知何故,我没有看到错误。 你看到错误了吗?
谢谢
void doSth(uchar *ptr, uint size, bool variant_one)
{
uchar *buffer = new uchar[size];
// Works
if(variant_one) {
for(uint i=0; i<size; i++) {
buffer[i] = (*(ptr+1));
ptr = ptr+2;
}
}
else {
uint16_t* ptr16 = (uint16_t*) &ptr;
for(uint i=0; i<size; i++) {
buffer[i] =(uchar) *(ptr16)>>4; // Gives Read Access Violation
ptr16++;
}
}
}
【问题讨论】:
-
&ptr是参数的位置,而不是它的值。 -
你不应该使用所有这些 c-cast,它们隐藏了错误
-
fwiw,你的第一个变体看起来也有点奇怪。像其他任何东西一样,指针是按值传递的,所以它并没有真正做调用者可以观察到的任何事情(除了泄漏
buffer)