指针算术中的访问冲突

Han*_* N. 3 c pointer-arithmetic

随着代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

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

Pab*_*ruz 9

当你添加时,buffer + nsize你必须意识到你实际上正在添加,buffer + (nsize * (sizeof(int))因为它是int *你做指针算术的时候.

所以它可能与它有关.尝试增加nsize nsize += 4096/sizeof(int)或更聪明的东西.

  • @MatsPetersson:不,SIZE_T是`buffersize`变量的类型,并且不会出现在错误的计算中.`buffer`的类型是`int*`,所以`buffer + nsize`通过`nsize*sizeof(int)`移动指针. (2认同)