C++类中的成员指针

chenfuxing123 2008-09-20 08:21:04
请帮忙看一下下面的代码:实在是找不到原因呀?
class a
{
public:
void method(char *inputname){
strcpy(name,inputname); /运行到这里为什么会报错呢。但name=new char[10] 就不会了为什么?
}
private:
char *name;
}
void main(){
a aa;
a.method();
}


...全文
427 29 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
我看你有戏 2009-10-10
  • 打赏
  • 举报
回复
指针里存的就是地址值,不要搞晕了

理解指针分两块

1.指针本身占了一块4个字节的内存
2.指针记录了某个地址值,而这块内存的大小由指针的类型决定
yuxiabo1984 2009-10-09
  • 打赏
  • 举报
回复
顶一下楼上的 这么一点代码 错误这么多 教材要换一下
taodm 2009-10-09
  • 打赏
  • 举报
回复
楼主需要换一本好点的教材了。
liushuiyou_sheng 2009-10-09
  • 打赏
  • 举报
回复
前几楼说的都对,我就不重复了。
szqh97 2009-10-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chenfuxing123 的回复:]
但name=inputname 这样也会报错呀?

这样name指针不就有空间了吗
[/Quote]
你这样是给指针赋值,还是没有分配内存空间。我记得《高质量C\C++编程》里面提到过这个问题的
类中有指针成员很容易出错的楼主多找一些这方面的材料看看吧
wa_yi 2009-10-08
  • 打赏
  • 举报
回复
指针太容易出错了
lbt777777 2008-09-22
  • 打赏
  • 举报
回复
yes
ada0564 2008-09-22
  • 打赏
  • 举报
回复
但name=inputname 这样也会报错呀?

这样name指针不就有空间了吗


楼上的各位大大好像都回答了 name 应该 先分配空间。。

但是楼主的这个问题。。

我来回答一下,字符数组的赋值,应该是要用strcpy吧,不能直接“=” 的吧。即使已经 new 了空间出来?
是这样理解的么??
zhuwanglove 2008-09-22
  • 打赏
  • 举报
回复
指针一定要指向一个指定空间
god_sun 2008-09-22
  • 打赏
  • 举报
回复
lz看下基础知识吧
kkndciapp 2008-09-22
  • 打赏
  • 举报
回复
帮你改了一下

#include <iostream> 
using namespace std;

class a
{
public:
void method(char *inputname){
int len=strlen(inputname);
name=new char[len+1];//要对name先分配内存才可以用
strcpy(name,inputname); //运行到这里为什么会报错呢。但name=new char[10] 就不会了为什么?
}
~a (){delete [] name;};//动态分配内存,要在析够的时候释放,防止内存泄漏
char * p()
{
return name;
}
private:
char *name;
} ;//要有分号
void main(){
a aa;
aa.method("hello");//aa才是对象,a是类
cout<<aa.p();
}
wudeshou82666 2008-09-22
  • 打赏
  • 举报
回复
指针会带来很多运行时刻的错误.学习
双子东宝 2008-09-22
  • 打赏
  • 举报
回复
指针很麻烦,
过来学习学习
Big鹏 2008-09-21
  • 打赏
  • 举报
回复
#include<iostream>
#include <string>
using namespace std;
class a
{
public:
void method(const char *inputname)
{
name=new char[10]; //此处指针使用前必须先分配空间.
strcpy(name,inputname); //字符串赋值不能用“=”,必须用strcpy或是memset;
cout<<name<<endl;
delete[] name; //最后一定不要忘记了释放内存;
}
private:
char *name;
};
void main(){
a aa;
aa.method("test");//是aa,不是a

}
Big鹏 2008-09-21
  • 打赏
  • 举报
回复
#include<iostream>
#include <string>
using namespace std;
class a
{
public:
void method(const char *inputname)
{
name=new char[10]; //此处指针使用前必须先分配空间.
strcpy(name,inputname); //字符串赋值不能用“=”,必须用strcpy或是memset;
cout<<name<<endl;
delete[] name; //最后一定不要忘记了翻译内存;
}
private:
char *name;
};
void main(){
a aa;
aa.method("test");//是aa,不是a

}
skyering 2008-09-20
  • 打赏
  • 举报
回复
name事先得先分配内存,一针见血啊!
jcy1986 2008-09-20
  • 打赏
  • 举报
回复
name 需要分配内存空间,
wudeshou82666 2008-09-20
  • 打赏
  • 举报
回复
给你的指针分配好你想要的空间吧.别乱指了
SeanHwang 2008-09-20
  • 打赏
  • 举报
回复
void main(){
a aa;
a.method(); //这个调用错了,应该是aa.method("test");
}

class{
//....
}; //逗号也忘了

char* name;//你定义了一个指针,但是没有初始化,他就只有一个指针,没有预留空间
strcpy(name,inputname); //你这样copy,很容易把内存其他地方的数据覆盖了
vcgaoshou 2008-09-20
  • 打赏
  • 举报
回复
3个大错误
1。aa.method()没有参数;
2。name没有分配空间
3. a.method(),a是类,不是对象
修改如下
class a
{
public:
void method(const char *inputname)
{
name=new char[strlen(inputname)+1];//先给name分配空间
strcpy(name,inputname);
}
private:
char *name;
};
void main(){
a aa;
aa.method("method");//是aa,不是a
}
加载更多回复(9)

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧