2016-04-02 13 views
0

ポインタ配列の終わりに文字列を追加しようとしましたが、選択した位置に文字列を挿入し、 。実行時にポインタ配列から文字列を削除する際にエラーが発生しました

Iがポインタへのポインタの最後に文字列を追加するために使用される第一の機能:

char **add(char **pp, int size, char *str) 
{ 
    if (size == 0) 
    { 
     pp = new char *[size+1]; 
    } 
    else 
    { 
     char **temp = new char *[size+1]; 
     for (int i = 0; i < size; i++) 
     { 
      temp[i] = pp[i]; 
     } 
     delete[]pp; 
     pp = temp; 
    } 
    pp[size] = new char[strlen(str) + 1]; 
    strcpy(pp[size], str); 
    return pp; 
} 

Iが選択された位置に文字列を挿入するために使用される第二の機能:

char **InsPtr(char **pp, int size, int ncell, char *str) 
{ 
    char**temp = new char *[size+1]; //добавить новый элемент [size+1] 
    for (int i = 0, j = 0; j < size + 1; j++) 
    { 
     if (j != ncell) 
     { 
      temp[j] = pp[i]; 
      i++; 
     } 
     else 
     { 
      temp[j]=new char[ strlen(str)+1]; 
      strcpy(temp[j], str); 
     } 
    } 
    delete[] pp; 
    pp = temp; 
    return pp; 
} 

そして、私が選択した任意の文字列を削除するために使用した関数は次のとおりです。

char **DelPtr(char **pp, int size, int ncell) 
{ 
    char**temp = new char*[size-1]; 
    for (int i = 0, j = 0; i < size; i++) 
    { 
     if (i != ncell) 
     { 
      temp[j] = pp[i]; 
      j++; 
     } 
    } 
    delete[]pp[ncell]; 
    pp[ncell] = 0; 
    delete[] pp; 
    pp = temp; 
    return pp; 
} 

私はを使用しましたを使用して4つの文字列を配列に追加し、**InsPtr(char **pp, int size, int ncell, char *str)で選択した位置に文字列を挿入するか、文字列を**DelPtr(char **pp, int size, int ncell)で削除すると、エラーなく正しく動作します。

**InsPtr(char **pp, int size, int ncell, char *str)を使用した場合、この機能を使用した後に**DelPtr(char **pp, int size, int ncell) 実行時にエラーが発生しました。ここで

が主な機能である:ここでは

void main() 
{ 
    int size = 0; 
    char **pp = 0; 
    pp = add(pp, size, "1111"); 
    size++; 
    pp = add(pp, size, "2222"); 
    size++; 
    pp = add(pp, size, "3333"); 
    size++; 
    pp = add(pp, size, "4444"); 
    size++; 
    int insert=2,DelS= 2; 
    for (int i = 0; i < size; i++) 
    { 
     cout << *(pp + i) << endl; 
    } 
    pp = InsPtr(pp, size, insert, "natasha"); 
    cout << endl; 

    for (int i = 0; i < size + 1; i++) 
    { 
     cout << *(pp + i) << endl; 
    } 
    pp = DelPtr(pp, size, DelS); 
    cout << endl; 
    for (int i = 0; i < size ; i++) 
    { 
     cout << *(pp + i) << endl; 
    } 
    system("pause"); 
} 

は、私は、実行時にエラーが発生する前得た結果である。第2の指標 "ナターシャ" で

1111 
2222 
3333 
4444 

インサート:

1111 
2222 
natasha 
3333 
4444 

2番目のインデックス「ナターシャ」を削除します。

1111 
2222 
3333 
+0

? –

+1

私は準備ができたクラスを使いたくなく、単にcを使ってみようとしています。 –

+0

**挿入後( "Natasha" ... ** **サイズはありません** ** **サイズ**は** insert()**によってインクリメントされます。この問題は発生しません。 –

答えて

1

ただ、このようなpp = DelPtr(pp, size, DelS); :)

pp = InsPtr(pp, size, insert, "natasha");size--;size++;を追加:なぜあなたは単に `のstd :: STRING`を使用していない

void main() 
{ 
    int size = 0; 
    char **pp = 0; 
    pp = add(pp, size, "1111"); 
    size++; 
    pp = add(pp, size, "2222"); 
    size++; 
    pp = add(pp, size, "3333"); 
    size++; 
    pp = add(pp, size, "4444"); 
    size++; 
    int insert=2,DelS= 2; 
    for (int i = 0; i < size; i++) 
    { 
    cout << *(pp + i) << endl; 
    } 
    pp = InsPtr(pp, size, insert, "natasha"); 
    cout << endl; 
    for (int i = 0; i < size + 1; i++) 
    { 
    cout << *(pp + i) << endl; 
    } 
    size++; 
    pp = DelPtr(pp, size, DelS); 
    cout << endl; 
    size--; 
    for (int i = 0; i < size ; i++) 
    { 
     cout << *(pp + i) << endl; 
    } 
    system("pause"); 
} 
+1

ありがとう、これは私と一緒に働く:) –

+0

あなたは大歓迎です。 。 –

関連する問題