2017-11-21 11 views
1

MyString이라는 자체 String 클래스를 만들려고합니다. 몇 가지 문자열 조작 함수가 있습니다. 모두 삽입 기능을 제외하고 모두 작동합니다. Insert 함수를 여러 번 사용하면 프로그램이 충돌합니다 (source.exe가 작동을 멈췄습니다). 저는 현재 Dev C++를 사용하고 있습니다.사용자 정의 char * insert 함수가 여러 번 실행될 때 런타임 오류를 발생합니다.

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; 
} 

매개 변수화 된 생성자 (숯불 *의 PTR 개인 멤버) :

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

나는 다음과 같은 경우 많은

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() 함수 시간, 그것은 때로는 충돌합니다.

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

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

답변

1

삽입 호출이 새 배열의 크기를 mallocing하지 않습니다. 첫 번째 substr 호출에서 원래 배열의 크기까지만 mallocing입니다.

+0

감사합니다. 완벽하게 작동합니다! –