未初期化ローカル変数は不確定な値を持ち、未定義の動作を呼び出すことが知られています。しかし、ポインターを使用してフラグメントをコピーし、後で同等性をチェックする操作は、未定義の動作につながりますか?intのフラグメントをコピーした後の等価性チェック
次はコンパイルと実行がスムーズですが、わかりません。
#include <stdio.h>
#include <string.h>
int main()
{
int p;
int q = 1;
char *_p = (char *)&p;
char *_q = (char *)&q;
size_t n;
for(n = 0; n < sizeof(int); n++) {
memcpy(_q++, _p++, sizeof(char));
}
if (p == q) {
printf("Equal!!!\n");
}
return 0;
}
ユニテール化された変数またはメモリの使用は、未定義の動作です。初期化されていないメモリからコピーしているので、そのコピーの結果を使用する操作はすべて未定義の動作です。 – kaylum