0

がありstruct alignedStruct、特別な位置合わせが必要です (SEE ext):

void* operator new(size_t i) { return _aligned_malloc(i, 16); }
void operator delete(void* p) { _aligned_free(p); }

この配置は、の一意のオブジェクト/ポインターに対しては正常に機能しますalignedStructが、次にこれを実行しようとしました:

alignedStruct * arr = new alignedStruct[count];

私のアプリケーションはクラッシュします。問題は間違いなく「配列の配置」に関するものです (正確には前の行にあります):

0xC0000005: Access violation reading location 0xFFFFFFFF.

このようなクラッシュは最大 60% の頻度で発生し、問題が一般的ではないことも示しています。

4

1 に答える 1

2

あなたが探しているのは、コンストラクターで適切に使用できる配置だと思います。newまたは、 andをオーバーロード_aligned_mallocすることもできます。operator new[]operator delete[]

void* operator new[] (std::size_t size)
{
   void * mem = _aligned_malloc(size, 16);
   if(mem == nullptr)
      throw std::bad_alloc;
   return mem;
}
于 2013-07-31T19:29:27.020 に答える