c++のnew演算子について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: c++のnew演算子について

Re: c++のnew演算子について

#3

by asd » 7年前

fly3555 さんが書きました:
これを実行すると何のエラーもなく通ります。p[1],p[2]に関してはメモリの確保を行っていないのに代入できて大丈夫なのでしょうか。
pはint型の要素1つ分しか確保していないのでp[1]やp[2]にアクセスしてはいけません。
配列の添え字の範囲チェックはしてくれないのでエラーも出なければ、なんとなく動作するかもしれませんが、
p[1]やp[2]の領域はほかの用途で使われる可能性もあるので読み取りも書き込みもしてはいけません。
(ほかの変数領域を破壊したり、おかしな値が取得できたりと意図しない動作をします)
Math さんが書きました:int arrはint *(arr+i)のsyntactic sugarだからです

http://dixq.net/forum/viewtopic.php?f=3&t=8134


糖衣構文(syntactic sugar)であっても*(p+1)や*(p+2)にアクセスしてはいけません。
リンク先でも指摘されていることではありますが誤解しないようご注意ください。

Re: c++のnew演算子について

#2

by Math » 7年前

int arrはint *(arr+i)のsyntactic sugarだからです

http://dixq.net/forum/viewtopic.php?f=3&t=8134

c++のnew演算子について

#1

by fly3555 » 7年前

コード:

int main(){
	int *p;

	p = new int[1];

	p[0] = 0;
	p[1] = 1;
	p[2] = 2;

	delete[] p;

	return 0;
}
これを実行すると何のエラーもなく通ります。p[1],p[2]に関してはメモリの確保を行っていないのに代入できて大丈夫なのでしょうか。

ページトップ