0

という本当に奇妙な現象に直面していますmemcpymemcpyサイズが 2GB のデータ ポインターを割り当てましたが、ポインターへのオフセットが 1666800 バイトを超える場合、割り当てられないようです。ここにコードがあります

dataMem = (struct dataRecord*) malloc(memsize * 1000000); // where memsize is 2000

... loop condition ...
{
    memcpy(dataMem + (dataCount * sizeof(struct dataRecord)), mesg, sizeof(struct dataRecord)); 
    dataCount++;
}

ここでsizeof(struct dataRecord)は 1200 バイトで、は 1389です。以前に割り当てられたように、オフセットはまだ 2000000000 から離れているdataCountはずです。dataMem + 1666800

私はこれについて本当に混乱していて、手がかりがありません。

4

1 に答える 1

0

mallocそのため、コードを変更してキャストを取り除きました。

void *dataMem;
dataMem = malloc(memsize * 1000000);

現在memcpyは正常に動作しているようです。しかし、なぜキャストしてはいけないのmallocでしょうか?

于 2012-12-12T03:42:03.600 に答える