0

同様にコードをスローします:

template<class T>
T* new_p(){
    T* result =  (T*) operator new (sizeof(T)); // HERE
    memset(result, 0, sizeof(T));
    result = new (result) T();
    return result;
}

ここに画像の説明を入力

ここに画像の説明を入力

VS2010 で new が機能しないことがあります。

4

2 に答える 2

1

ほとんどの場合、このようなヒープ アサート エラーが発生した場合は、以前に何かを台無しにしたことを意味します。それはおそらく現在のものではありませんmalloc/newあなたが実行しているのは問題です。

おそらく、同じ割り当てに対してfree/deleteを 2 回呼び出したか、ヒープに割り当てられたバッファーをオーバーランした可能性があります。残念ながら、これらは追跡するのが難しいことがよくあります。

于 2013-04-08T16:42:05.643 に答える
0

新品でこんなに使われているのは見たことがありません。あなたがそのコードで何をしようとしているのか理解していないかもしれませんが、これは私がそうあるべきだと思っていた方法です。

template<class T>
T* new_p(){
    T* result =  new T();
    memset(result, 0, sizeof(T)); //BTW, I doubt this will do good things
    return result;
}
于 2013-04-08T16:42:13.477 に答える