3

使用代码:

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;
}

为什么我会收到访问冲突?我应该改变什么?

4

3 回答 3

9

当您添加时,buffer + nsize您必须意识到您实际上是在添加buffer + (nsize * (sizeof(int)),因为这是int *您进行指针运算的时候。

所以它可能与它有关。尝试增加 nsize bynsize += 4096/sizeof(int)或更聪明的方法。

于 2013-01-24T13:08:23.410 回答
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 倍数的大小。

于 2013-01-24T14:29:05.060 回答
0

将您的while循环更新为

while(nsize < (buffersize/sizeof(int))

bufferints 而不是charint占用多个字节,您过度计数并从不属于buffer.

于 2013-01-24T13:13:18.297 回答