C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: new演算子の使用


(過去ログ 78 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■46246 / inTopicNo.1)  new演算子の使用
  
□投稿者/ ★★★ (1回)-(2010/01/28(Thu) 21:06:18)

分類:[C/C++] 

初歩の質問で大変申し訳ないのですが、どうしてもよくわからないので質問させていただきます。
C++でのnew演算子の使用に対しての質問です。
パターン1でもnewで連続してメモリ確保を行っているので、パターン2でも問題ないのではと思って
ためしてみたのですがパターン1は問題ないのですがパターン2では異常終了してしまいます。
この違いは一体なんななのでしょうか?
それと、そもそもnewを連続して使用するのは可能なのでしょうか?

// パターン1
int main( int argc, char *argv )
{
char *str = "This is a test\n";
char *temp = new char('\0');

temp = new char[strlen(str)+1];
strcpy( temp, str );
cout << temp;

delete[] temp;
}
// パターン2
int main( int argc, char *argv )
{
char *str1 = "This is a test ";
char *str2 = "C++ Programing\n"
char *temp = new char[strlen(str)+1];

strcpy( temp, str1 );
temp = new char[strlen(str2)+1];
strcat( temp, str2 );
cout << temp;

delete[] temp;
}

引用返信 編集キー/
■46247 / inTopicNo.2)  Re[1]: new演算子の使用
□投稿者/ 囚人 (471回)-(2010/01/28(Thu) 21:22:27)
文字が空の場所に、いきなり strcat するのがまずいんじゃないかなー。
strcpy( temp, "" );
strcat( temp, str2 );
ってしてみては。

でも、質問文からするとコードが意図通りになってないと思うけど。
引用返信 編集キー/
■46253 / inTopicNo.3)  Re[2]: new演算子の使用
□投稿者/ επιστημη (2418回)-(2010/01/28(Thu) 22:34:09)
επιστημη さんの Web サイト
int main( int argc, char *argv ) {
  char *str1 = "This is a test ";
  char *str2 = "C++ Programing\n"
  char *temp = new char[strlen(str)+1]; 

  strcpy( temp, str1 ); // tempに"This is a test " をコピーしておきながら
  temp = new char[strlen(str2)+1]; // tempを書きつぶして迷子にし、さらに
  strcat( temp, str2 ); // なにが入ってるかもわからんとこにつなぐ、と。
  cout << temp; // そらまおかしくもなるわなぁ。

  delete[] temp;
}

引用返信 編集キー/
■46254 / inTopicNo.4)  Re[1]: new演算子の使用
□投稿者/ たくボン (353回)-(2010/01/28(Thu) 22:34:13)
No46246 (★★★ さん) に返信
> 初歩の質問で大変申し訳ないのですが、どうしてもよくわからないので質問させていただきます。
> // パターン2
> int main( int argc, char *argv )
> {
> char *str1 = "This is a test ";
> char *str2 = "C++ Programing\n"
> char *temp = new char[strlen(str)+1];
>
> strcpy( temp, str1 );
> temp = new char[strlen(str2)+1];
> strcat( temp, str2 );
> cout << temp;
>
> delete[] temp;
> }

strlen(str)
str???
引用返信 編集キー/
■46257 / inTopicNo.5)  Re[2]: new演算子の使用
□投稿者/ επιστημη (2419回)-(2010/01/28(Thu) 23:01:58)
επιστημη さんの Web サイト
> strlen(str)
> str???

typoでしょ。そじゃなきゃコンパイル通らんし。

引用返信 編集キー/
■46266 / inTopicNo.6)  Re[3]: new演算子の使用
□投稿者/ 囚人 (474回)-(2010/01/29(Fri) 01:14:47)
多分ですけど、new を繰り返すと、最初に確保した領域の後ろにどんどん追加されていく、と誤解されるんじゃないですかね。

でないと、delete が一回少ないのと、strcat している意味が分からない。

引用返信 編集キー/
■46269 / inTopicNo.7)  Re[4]: new演算子の使用
□投稿者/ επιστημη (2420回)-(2010/01/29(Fri) 05:50:00)
επιστημη さんの Web サイト
2010/01/29(Fri) 08:42:10 編集(投稿者)
あー、reallocみたいな動きをするとオモコしてると。なるほど。

...で、C++なら文字列ごときにnew/delete使わない。
てか、char*なんつー"C文字列"を使わない。

  std::string str1 = "This is a test ";
  std::string str2 = "C++ Programing\n"
  std::string temp = str1 + str2;
  std::cout << temp;

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -