2017-11-21 1 views
1

MyStringという独自のStringクラスを作成しようとしています。私は文字列操作関数がほとんどありません。それらのすべては挿入機能以外は機能します。何度も挿入機能を使用すると、プログラムがクラッシュします(source.exeは機能しなくなりました)。私は現在Dev C++を使用しています。カスタムchar * insert関数は、複数回実行すると実行時エラーを返します

MyString MyString::insert(MyString s2, int pos) { 

    int size = strlen(this->getptr()); 

    if(pos > size || pos < 0){ 
     return "Error"; 
    } 

    char * ptrLeft = this->substr(0, pos); 
    char * ptrRight = this->substr(pos, size - pos); 

    strcat(ptrLeft, s2.getptr()); 
    strcat(ptrLeft, ptrRight); 

    return ptrLeft; 
} 

これは、文字列MyStringクラスのSUBSTR()関数です:私は、次の多くを行うと

MyString::MyString(char* str){ 
    int size = strlen(str); 
    ptr = new char[size]; 
    ptr = str; 
} 

char * MyString::substr(int position, int length) { 
    char* otherString = 0; 

    otherString = (char*)malloc(length + 1); 
    memcpy(otherString, &this->getptr()[position], length); 
    otherString[length] = 0; 

    return otherString; 
} 

パラメータ化されたコンストラクタ(するchar * ptrがプライベートメンバーです)時々、クラッシュすることがあります。

buff = buff.insert(" Text", 5); 
cout << buff; 
system("PAUSE"); 

buff = buff.insert(" Text", 5); 
cout << buff; 
system("PAUSE"); 

答えて

1

挿入呼び出しは、新しい配列のサイズをmallocingしません。最初のsubstrコールでは、元の配列のサイズまでのみ割り当てられます

+0

ありがとう、完璧に動作します! –

関連する問題