私はちょうどこれを好奇心から試しています。私はコンストラクタとコピーコンストラクタを持つ構造体を持っていて、構造体へのポインタへのメモリ割り当てを実装すると同時に、メインの中でコピーコンストラクタを使って構造体を初期化しようとしています。コピー構造の初期化は問題なく動作しますが、メインリターンの前に解放しようとすると、ヒープにアサーションエラーが発生します。構造体のメモリ割り当てとコピーコンストラクタ
#include <stdio.h>
#include <malloc.h>
typedef struct tagInfo
{
int iX;
int iY;
tagInfo() {};
tagInfo(int x, int y)
: iX(x), iY(y) {};
~tagInfo() {};
}INFO;
int main (void)
{
INFO* pInfo = (INFO*)malloc(sizeof(INFO));
pInfo = &INFO(10, 10);
free(pInfo);
return 0;
}
アサーションエラーを発生させずに上記のポインタを安全に解放するにはどうすればよいですか?
ないでスパムタグ!これは有効なCコードではありません! – StoryTeller
C++だから、 'new' /' delete'を使うべきです。それに加えて、一時的なメモリアドレスを格納し、それを 'free'で使うのはUBです(' malloc'空間を解放せずにメモリリークを引き起こすことはありません)。 –
CのイディオムをC++コードに混ぜて、その意味をはっきりと理解することなく、混乱を招いています。 C++をうまく学ぶ方法は試行錯誤ではなく、一番下から始め、以前に学んだ言語のバイアスをかけずにアプローチします。初心者のための[良い本を選んでください](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)とステップバイステップでそれを取る。 – StoryTeller