C++のnewについてなのですが、


char* p = new char[32]();

というコードを初めて見ました。

この時の[32]の後の、()はどういう意味でしょう??
()の中に数字を書くと、コンパイラに怒られました。

回答の条件
  • 1人2回まで
  • 登録:2008/08/07 00:10:07
  • 終了:2008/08/07 01:07:19

回答(2件)

id:neuromancer_sho No.1

neuromancer_sho回答回数28ベストアンサー獲得回数32008/08/07 00:52:57

ポイント5pt

よく分かりませんが、以下をやってみたら、detele p;でinvalid pointerになりました。

p,p2,p3 同じ型みたい?

#include <iostream>
#include <typeinfo>

using namespace std;

int main(){
	char* p = new char[32]();
	char* p2 = new char[32];
	char* p3 = "abcde";
	p = "abcd efg";
	cout << typeid(p).name() << endl;
	cout << typeid(p2).name() << endl;
	cout << typeid(p3).name() << endl;
	delete p;
	delete p2;

}

結果:

Pc

Pc

Pc

glibc detected *** free(): invalid pointer: 0x10000f84 ***

Aborted

参考になりますかね・・・

id:suzume_oyado

そのメッセージは、delete p のせいではないでしょうか?

p に代入してしまっているので。

2008/08/07 00:57:19
id:AnonymousCoward No.2

匿名回答0号回答回数35ベストアンサー獲得回数32008/08/07 01:02:49

ポイント65pt

この時の[32]の後の、()はどういう意味でしょう??

デフォルトコンストラクタの ()。

()の中に数字を書くと、コンパイラに怒られました。

配列の要素はデフォルトコンストラクタ以外のコンストラクタでは初期化できないのでエラーになる。

id:suzume_oyado

コンストラクタの()なんですね。

ありがとうございました。

2008/08/07 01:07:12

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません