2
C ++ 20までのint未定義の動作にmallocを使用しています
次のコードはC ++ 20まで未定義の動作をしていると言われました。 int *p = (int*)malloc(sizeof(int)); *p = 10; 本当? 引数は、intオブジェクトに値を割り当てる前にオブジェクトの存続期間が開始されないというものでした(P0593R6)。問題を解決するには、配置newを使用する必要があります。 int *p = (int*)malloc(sizeof(int)); new (p) int; *p = 10; オブジェクトの存続期間を開始するために、簡単なデフォルトのコンストラクターを呼び出す必要が本当にありますか? 同時に、コードは純粋なCで未定義の動作をしません。しかし、intCコードでを割り当て、それをC ++コードで使用するとどうなりますか? // C source code: int *alloc_int(void) { int *p = (int*)malloc(sizeof(int)); *p = 10; return p; } // C++ source code: extern "C" int *alloc_int(void); …