0

「chars」の文字列を受け取るこの関数があります。その文字列を調べて、ポインターを使用して、2 番目の要素が最初の要素と同じかどうかを確認しようとしています。だから、aaabbccddd があるとしましょう。3a、2bs、2cs、3ds がある配列に書き込みたいと思います。ポインターを使用して、2 番目の文字列が最初の文字列と同じかどうかを判断するのに本当に苦労しています。この一時ポインターを作成し、一時++を行います。これは基本的に、第 2 項以降のすべてを示しているだけです。第 2 項を個別に見て、ポインターだけで第 1 項と比較するにはどうすればよいでしょうか。

void RLE<T>::Compress(const T* input, int inSize)
{

   delete m_Data;
    m_Size = 0;

    T * m_Data;
    m_Data = new T[inSize*2];


    int runSize = MaxRunSize();

    const T * temp;
    temp = input;

    temp++;

ここのこの部分では常にエラーが発生し、Bad ポインターがあると表示されます。入力ポインターが作成した一時ポインターよりも長いため、これは本質的に機能しないことを理解しています。そして、私の配列は決して初期化されません

    if  (temp == input)
    {
        std::cout<<"here"<<std::endl;
        int number = 1;
        number++;
        m_Data[0] = number;
        m_Size++;
        std::cout<<temp;
        m_Data[m_Size] = *temp;


    }
}

どんな助けでも大歓迎です

4

1 に答える 1

1

あなたの間違いは最初にありましたか?

delete m_Data;
m_Size = 0;

T * m_Data;

はその時点では未定義であるため、これは機能しませんm_Data。名前付けによって、それもメンバーである場合を除き、その場合は再定義しないでください。

やるべきじゃない

if(temp[i] == temp[i+1]) //or something like that

それ以外の

if  (temp == input)
于 2013-02-06T03:32:43.287 に答える