#include<iostream>
#include<stdio.h>
#include<string.h>
class String{
public:
String(){}
String(const char *ptr)
{
pstr_= new char[strlen(ptr) + 1];
strcpy(pstr_,ptr);
}
String(const String &str)
{
strcpy(this->pstr_,str.get_pstr());
}
~String()
{
delete pstr_ ;
}
char *get_pstr()
{
return pstr_ ;
}
private:
char *pstr_ ;
};
int main(int argc,char *argv[])
{
char *sh = "Hello World";
String str(sh) ;
String st(str) ;
std::cout << str.get_pstr() << std::endl ;
return 0 ;
}
Извините, мой английский плохой и поможет вам понять мой смысл. Я пишу код вроде этого. Я уверен, что это правильно. Однако это может привести к сбою сегрегации. Итак, я нахожу странное явление gdb.Как понять функцию copy-constructior?
38 std::cout << str.get_pstr() << std::endl ;
(gdb) n
Breakpoint 1, String::get_pstr (this=0x7fffffffe470) at String.cpp:26
26 return pstr_ ;
(gdb) n
27 }
(gdb) n
Hello World
main (argc=1, argv=0x7fffffffe578) at String.cpp:40
40 return 0 ;
(gdb) n
37 String st(str) ;
(gdb) n
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7282ba1 in __strlen_sse2() from /lib64/libc.so.6
Когда программа работает, чтобы вернуть 0, она может перезапустить String st (str). И я беспокоюсь об этом. Помогите вам это объяснить. Спасибо!
Как вы сказали, я так неосторожен, что забыл написать выделение памяти. Спасибо за ваш ответ. Может быть, мне нужно более осторожно. –
Добро пожаловать. Я вижу, что вы новичок в Stackoverflow: не забывайте поднимать и принимать любые полезные ответы на ваши вопросы! Посмотрите [на туре сайта] (http://stackoverflow.com/tour). Ура! – UncleZeiv