1

これは宿題用の .H ファイルとして与えられており、それに合わせて .C ファイルを作成するように依頼されています。それは本当に単純なものです。小さな何かが欠けていると確信しています。

#ifndef String_H
#define String_H

#include <iostream>

class String
{
public:

  // constructor: initializes String with copy of 0-terminated C-string  
  String(const char *p);

  // destructor (when can shared data be released?)
  ~String();

  // copy constructor (how does this change reference counts?)
  String(const String &x);

  // assignment operator  (how does this change reference counts?)
  String &operator=(const String &x); 

  // return number of non-0 characters in string
  int size() const;

  // return reference count
  int ref_count() const;

  // returns pointer to character array
  const char *cstr() const;

private:

  // data containing character strings
  // shared by Strings when copying/assigning
  struct SharedCString
  {
    char *data; // 0-terminated char array
    int n;      // number of non-0 characters in string
    int count;  // reference count, how many Strings share this object?
  };

  SharedCString *shared;
};

#endif

コンストラクターで、SharedCString のカウントの値を 1 に設定しようとすると、セグメンテーション エラーが発生します。

私はそれを渡そうとしていました:

   shared->count = 1;

なぜこれが機能しないのかわかりません。

4

2 に答える 2

2

回線でセグメンテーション違反が発生した場合

shared->count = 1;

thensharedは NULL またはガベージであり、プロセスが所有していないメモリを指しています。

やったほうがいい

shared = new SharedCString;

アクセスする前に。

于 2012-09-26T22:43:41.083 に答える
2

SharedCString のメモリにスペースを割り当てる必要があります。これは現在、ランダムなメモリアドレスを指しているポインタです(初期化されていない変数と同じように)。

この質問はそれをカバーしています:構造体にメモリを動的に割り当てる

于 2012-09-26T22:44:40.163 に答える