还是函数指针和指针,帮忙看看

qer_liu 2007-05-17 03:37:41
//代码

class X{
typedef void(X::*func)(int**);
private:
int count;
public:
//构造函数
X(){ count = 0; };

//用函数指针作参数的函数
void call(func pt_func , int* buff[] ){

(this->*pt_func)( buff );

if( count < 3 ) call( (this->*pt_func) , buff);

};

//函数指针所指的函数
void modify( int * buff[]) {
count ++;
cout<<"modify data "<<endl;
*(buff[0]) = count;
*(buff[1]) = count + 1;
};

//调用有函数指针参数的函数
void test(){
func pt_func = &X::modify;
int a1 = 0;
int a2 = 0;
int * buff[2] = {&a1, &a2};

call( pt_func, buff );

cout<<"data:"<<endl
<<*(buff[0])<<" "
<<*(buff[1])<<" "
<<endl;
};

};

//主函数
int main(int argc, char *argv[])
{

X x;
x.test();

system("PAUSE");
return 0;
}


//说明
我的本意是想在test下面开辟出来一个指针型buff,然后通过call调用modify修改这个buff里面指针所指的内容

//问题
1,编译完全通过
2,运行时出示指针方面的问题
3,调试发现第一次跑到modify的时候没有错误,buff修改正确。但第二次跑到这里的时候,buff指针指向错误的地方去了,于是出错。
4,为什么会这样?
...全文
187 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ayw215 2007-05-17
  • 打赏
  • 举报
回复
坏同学速度好快
yuyunliuhen 2007-05-17
  • 打赏
  • 举报
回复
mark
qer_liu 2007-05-17
  • 打赏
  • 举报
回复
to:
buff是test函数的局部数组变量, 没有在堆里开辟空间, 传递参数是不能用这种变量的.
应该先用malloc申请到资源.

--------------------------------------------
我传过来的参数是数组指针,所以应该没有问题
dai_weitao 2007-05-17
  • 打赏
  • 举报
回复
buff是test函数的局部数组变量, 没有在堆里开辟空间, 传递参数是不能用这种变量的.
应该先用malloc申请到资源.
qer_liu 2007-05-17
  • 打赏
  • 举报
回复
对了:)
对函数指针的用法,理解的还很不好,学习啊
非常感谢akirya
qer_liu 2007-05-17
  • 打赏
  • 举报
回复
等我看下,呵呵
  • 打赏
  • 举报
回复
call函数改一下
//用函数指针作参数的函数
void call(func pt_func , int* buff[] ){

(this->*pt_func)( buff );

if( count < 3 ) call( pt_func , buff);

};
这样就运行正确了,我这里是vc8

65,182

社区成员

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

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