2017-01-03 7 views
0

Я использую эти коды.Ошибка чтения символов строки. Allocate memory

Возможно, это легко, но теперь я не могу. Пожалуйста, помогите мне об этом. Я всегда смотрю NULL в этой функции.

Как я могу решить эту проблему? Я не могу сделать это.

Большое спасибо.

коды:

int my_len(const char* p) { 

     int c = 0; 
     while (*p != '\0') 
     { 
      c++; 
      *p++; 
     } 
     return c; 
    } 


String::String() 
    :m_str(NULL) 
{ 
} 


String::String(char * other_str) 
{ 
} 
{ 

    int mystrlen = my_len(m_str); 
    int myrhslen = my_len(other_str.m_str); 

    if (mystrlen != myrhslen) 
    { 
     return false; 
    } 
    else 
    { 
     for (int i = 0; i < mystrlen; i++) 
     { 
      if (m_str[i] != other_str.m_str[i]) 
      { 
       return false; 
      } 
     } 
     return true; 
    } 
} 
} 
+0

Возможно, вам понадобится 'String :: String (const char * other_str)', если только написать 'String (« Hello »)'. – MSalters

ответ

1

Ваш не-конструктор по умолчанию имеет пустое выполнение:

String::String(char * other_str) 
{ 
} 

Так вот m_str остается неинициализированным. Вы могли бы, возможно скопировать строку, если это ваше намерение так:

String::String(char * other_str) 
{ 
    m_str = strdup(other_str); 
} 

Но тогда вам придется управлять памяти, выделенной strdup себя, например, в деструкторе:

String::~String() 
{ 
    if (m_str != NULL) 
     free(m_str); 
} 
+0

Большое спасибо. Все хорошо. Теперь я создаю функцию my_strdup, потому что мне нужно всегда выполнять свою функцию. –