The*_*use 2 c++ printing pointers char
我正在写一个简单的程序.里面只有一节课.有一个私人成员'char*号码'和两个功能(会有更多,但首先这些应该正常工作:)).
第一个应该将'source'复制到'number'变量中(我想这里的某个地方就是问题):
LongNumber::LongNumber(const char * source ){
int digits = strlen(source);
char* number = new char[digits+1];
strcpy( number, source );
// cout<<number<<endl; - if the line is uncommented,
// the output is correct and there isn't a problem
}
Run Code Online (Sandbox Code Playgroud)
和打印功能:
void LongNumber::print(){
cout<<number<<endl;
// when I try to print with the same line of code here..it crashes
}
Run Code Online (Sandbox Code Playgroud)
当然,我错过了什么......但是什么?
(因为这是我的第一篇文章......你认为标签是否已经更正......你会如何标记帖子?)
先感谢您 :)
当您退出构造函数时,您的number char*数组将超出范围.当你到达print()时,由于程序不再能够访问*数字最初指向的内存,它会崩溃(即分段错误).要解决此问题,请执行以下操作:
class LongNumber
{
char *number;
LongNumber(const char *source);
~LongNumber();
void print();
};
LongNumber::LongNumber(const char * source ){
int digits = strlen(source);
number = new char[digits+1];
strcpy( number, source );
}
void LongNumber::print(){
cout<<number<<endl;
}
Run Code Online (Sandbox Code Playgroud)
不要忘记执行以下操作:
LongNumber::~LongNumber()
{
delete [] number; // to avoid memory leaks
}
Run Code Online (Sandbox Code Playgroud)
我还强烈建议使用STL :: string而不是使用char*作为你的*number变量,因为你不必自己处理内存管理开销,复制字符串也会更容易.
在LongNumber构造函数中,您声明一个名为的新局部变量number,并使用新char数组对其进行初始化:
char* number = new char[digits+1];
Run Code Online (Sandbox Code Playgroud)
相反,你应该省略char*,以便它看起来不像一个新的变量声明并使用对象成员变量:
number = new char[digits+1];
Run Code Online (Sandbox Code Playgroud)
使用当前代码,成员变量number永远不会被初始化并在以后使用它print会导致错误.
| 归档时间: |
|
| 查看次数: |
14386 次 |
| 最近记录: |