一个函数指针传递的问题,困扰了我很久,望高手来解答
一个函数指针传递的问题,困扰了我很久,望高手来解答
楼主wilfred_2002()2002-10-22 11:42:24 在 C/C++ / C语言 提问 void Writecd(void)
{
PCD_Execute PExe;
......
GetDeviceInfo(PExe);
.....
}
void GetDeviceInfo(PCD_Execute PExe)
{
.....
PExe->GetInfo->PDeviceInfo->CDRType=0xff; //*****
......
}
程序以前可以执行,可现在每次执行到*****这里时,都会提示说该程序执行了非法操作,
以前和现在的程序完全一样.
到底是怎么回事,望高手指点!!! 问题点数:100、回复次数:14Top
1 楼zhdleo(叮东)回复于 2002-10-22 11:59:53 得分 10
会不会是你的0xff已经被别的占用了??
有时候就是容易忘,所以最好用 +Top
2 楼tangl_99(Min-Kyeong)回复于 2002-10-22 12:33:21 得分 10
你的PCD_Exeute只是个指针类型吧.
在执行PExe->GetInfo->PDeviceInfo->CDRType=0xff;前你应该生成一个CD_Execute
如: PExe=new CD_Execute;
否则你的PExe所指的类根本就不存在 .Top
3 楼fixopen(dup)回复于 2002-10-22 12:41:20 得分 10
PExe->GetInfo->PDeviceInfo->CDRType = 0xFF;
一般情况下,出现这种问题都是没有初始化的指针导致。
PExe保证存在么?
PExe->GetInfo一定保证已经指向内存了么?
PExe->GetInfo->PDeviceInfo一定保证已经指向内存了么?Top
4 楼wilfred_2002()回复于 2002-10-22 12:46:34 得分 0
执行PExe->GetInfo->PDeviceInfo->CDRType=0xff 的指针PExe是从
GetDeviceInfo(PCD_Execute PExe) 传进来的,PExe会不存在吗?Top
5 楼wilfred_2002()回复于 2002-10-22 12:53:41 得分 0
补充一下,我的理解是:
在调用GetDeviceInfo(PCD_Execute PExe) 时,就已经生成了一个PCD_Execute 类型的指针PExe,而调用他的函数通过参数传递又使PExe得到了初始值,
请问我这么理解有哪些不对的地方?请各位高手指出Top
6 楼cococut(小鱼的天空)回复于 2002-10-22 13:09:52 得分 10
我想你是已经作这样的声明
typedef PCD_Execute CD_Execute *;
因此你调用的时候只是声明了一个指针,而没有分配空间,给没有分配空间的指针赋值才会出错,应该是
void Writecd(void)
{
PCD_Execute PExe;
PExe = new CD_execute;
GetDeviceInfo(PExe);
delete PExe;
}
Top
7 楼hehe214(风之子)回复于 2002-10-22 13:23:46 得分 0
up,学习中Top
8 楼wilfred_2002()回复于 2002-10-22 13:24:32 得分 0
十分十分地抱歉,原函数是这样的,是我自己写掉了
void Writecd(void)
{
CD_Execute Exe;
PCD_Execute PExe;
PExe=&Exe;
......
GetDeviceInfo(PExe);
.....
}
Top
9 楼wilfred_2002()回复于 2002-10-22 13:28:56 得分 0
问题同上,每次执行到*****这里时,都会提示说该程序执行了非法操作
Top
10 楼hohoo(hohoo)回复于 2002-10-22 13:30:55 得分 10
结构中是否还有指针变量没有初始化。Top
11 楼cococut(小鱼的天空)回复于 2002-10-22 13:32:57 得分 40
看看你的CD_Execute中的
GetInfo->PDeviceInfo
的CDRType分配了空间没有?Top
12 楼wilfred_2002()回复于 2002-10-22 13:54:18 得分 0
还有其他的高见吗?Top
13 楼winco(老狼)回复于 2002-10-22 14:27:06 得分 10
指针初始化的问题Top
14 楼llyhappy(男色魅力)回复于 2002-10-22 16:20:47 得分 0
应该是指针初始化问题。Top
-
相关文章
2秒记住本站域名
玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn
