0

MSVC2010でC文字列の配列をゼロポインタで初期化したい

// Foo.h
#pragma once
class Foo {
  int sz_;
  char **arr_; 
public:
  Foo();
  ~Foo();
  // ... some other functions
};

// Foo.cpp
#include "Foo.h"
#define INITIAL_SZ 20

Foo::Foo() : sz_(INITIAL_SZ) {
  // there I have to initialize arr_ (dynamic array and can be enlarged later)
  arr_ = (char **)calloc(INITIAL_SZ * sizeof (char *)); // ??? 
  // or maybe arr_ = new ...
}

初期化を修正するにはarr_?STLやMFCなどは使えませんでした。

4

5 に答える 5

5

arr = new char*[INITIAL_SZ]();します-初期化リストに入れることもできます。

于 2011-05-26T17:39:25.320 に答える
4

STL などを本当に避けたい場合は、次のようにしてください。

arr_ = new char*[INITIAL_SZ]();

これを初期化リストに入れることもできます。

delete [] arr_デストラクタで呼び出すことを忘れないでください。(@Nawazが以下で指摘しているように、おそらく3つのルールに従い、適切なコピーコンストラクタと代入演算子も定義する必要があります。)

于 2011-05-26T17:40:14.017 に答える
2

1. 適切な文字列クラスを構築する

2.適切な配列クラスを構築する

3. 文字列に配列を使用する

メモリ リーク、二重解放、およびメモリ破損を楽しく追跡します。

于 2011-05-26T17:41:44.973 に答える
1
arr_ = (char **)calloc(INITIAL_SZ * sizeof (char *));

する必要があります

arr_ = (char **)calloc(INITIAL_SZ, sizeof (char *));

于 2011-05-26T17:40:07.897 に答える
1

正しい方法は、arr_asを再定義し、予想される文字列の数を示すstd::vector<std::string>ために使用することです。vector::reserve()メモリは C++ に任せましょう。

しかし、生の C 文字列を使用する必要がある場合は、おそらく次のようにします。

arr_ = new char *[sz_];
于 2011-05-26T17:40:33.477 に答える