|
#ifndef __string_h__ #define __string_h__ #include <string.h> #endif class data { private: char *name; int id; char sex; static int count; public: data(char *p) { name=new char [strlen(p)+1];//写成(strlen(p)+1) strcpy(name,p); //析构函数delete name时发生段错误 } void set_id(int i); void set_sex(char sex); int get_id(void); char get_sex(void); char *get_name(void); friend void spy(const data &a); void display(void); ~data() { delete name; } };
|
p为字符串指针,写成name=new char(strlen(p)+1);
strlen(p)返回字符串长度,这样strlen(p)+1就是一个数字,而数字和字符对与编译器来说是一样的,所以new char(strlen(p)+1)实质是申请了一个int大小的空间,后边strcpy(name,p);实质是将一段字符串复制到一个int大小的空间,而这个空间肯定是容不下这个字符串,而此时内存中相邻的字段没有被其他进程占用,而发生越界复制,而在退出时,delete时,会销毁内存,而一部分内存不属于本进程,而发生段错误。
如果写成name=new char[strlen(p)+1];就告诉编译器申请空间的内型是char 而申请的大小是strlen(p)+1, 错误的主要原因还是没有熟练c++,新手啊,才学了2天。加油
阅读(1060) | 评论(0) | 转发(0) |