4

構造体内で char* 文字列を初期化したい。

これは構造体です:

typedef struct __String  {
    char*    data;        // C-string data, 
    unsigned* copyRef;     // number of copy reference, delete only when the copyRef is 0
    bool     isACopy;     // this boolean is true when *data is a ref to an other MyString

  __String () {
      data = 0;
      isACopy = false;
      copyRef = new unsigned();
      *copyRef = 0;
      return;
 }

    void addCopyRef() {
        *copyRef++;
    }

    void removeCopyRef() {
        *copyRef--;
    }
 } *MyString;

そして、これがクラッシュするポイントです..

void Initialize(MyString& string){

    string->data = new char[LENGHT];
    string->data[0] ='\0'; // this generate an error!
    string->addCopyRef();
}

これがメインです:

MyString left_string, right_string, both_string;
Initialize(left_string);
Initialize(right_string);
Initialize(both_string);

最初のものはうまくいっていますが、2番目のものはそうではありません..どこに問題があるのか​​ を理解するのを手伝ってもらえますか? ありがとう!

4

2 に答える 2

7

次のようにオブジェクトを渡す前に、オブジェクトにメモリを割り当てる必要があります。

MyString left_string = new __String();
Initialize(left_string);

一般的な提案として、そのような typedef は使用しないでください。これらは非常に混乱を招き、エラーが発生しやすくなります。ポインターを typedef することにした場合は、少なくともそれが型のポインターであることを示しますtypedef struct __String* MyStringPtr

于 2013-04-14T11:46:37.250 に答える