使用代码:
int nsize;
int * buffer;
char TargetBuffer[4096];
const SIZE_T buffersize = (320*240) * sizeof(int);
buffer = (int *) malloc(bufferSize);
// fill buffer with data
nsize = 0;
while(nsize < buffersize)
{
// HERE after some loops i get Access Violation
memcpy(TargetBuffer, buffer + nsize, 4096);
// do stuff with TargetBuffer
nsize += 4096;
}
为什么我会收到访问冲突?我应该改变什么?
答案 0 :(得分:9)
当您添加buffer + nsize
时,您必须意识到实际上正在添加buffer + (nsize * (sizeof(int))
,因为当您进行指针运算时它是int *
。
所以它可能与它有关。尝试按nsize += 4096/sizeof(int)
或更聪明的方式递增nsize。
答案 1 :(得分:3)
我会做这样的事情:
SIZE_T left = buffersize;
nsize = 0;
while(left)
{
SIZE_T block = (left >= 4096)?4096:left;
// HERE after some loops i get Access Violation
memcpy(TargetBuffer, buffer, block);
buffer += (left) / sizeof(*buffer);
// do stuff with TargetBuffer
left -= block;
}
我很确定你看到的问题是你正在走过边缘,因为你的代码没有处理不是4K倍数的大小。
答案 2 :(得分:0)
将您的while
循环更新为
while(nsize < (buffersize/sizeof(int))
buffer
适用于int
而非char
。 int
占用多个字节,您从内存中过度计数和复制,而不是buffer
的一部分。