void* block = ::operator new(n*size);
int i;
for(i = 0;i<BLOCK_SIZE -1;i++){
*(unsigned int*)((unsigned int)block + n*i) = (unsigned int)block + n*(1+i);
}
*(unsigned int*)((unsigned int)block + n*i) = 0;
質問>上記のコードの意味を理解できません。 1つのメモリブロックが次のブロックメモリを指しているようです。`*(unsigned int *)(unsigned int)ブロック+ n * i)の意味は?
誰か教えていただけますか?
「void *」に対して算術演算を実行することはできません。元のプログラマーはすべてを 'unsigned int'にキャストして算術演算を許可し、それをポインタにキャストし直します。 ['std :: uintptr_t'](http://en.cppreference.com/w/cpp/types/integer)は、ポインタを格納するための正しい整数型であることに注意してください。 –
これは、Standard C++では未定義の動作です。準拠するためには、 'size == sizeof(unsigned int)'と仮定して、 'void * block = new unsigned int [n]'とすることができます。 –
@ q0987これはpublic/open sourceの一部ですか? –