tempad
Readygo技术搜索引擎 >>软件工程 >> 一个函数指针传递的问题,困扰了我很久,望高手来解答

一个函数指针传递的问题,困扰了我很久,望高手来解答

Readygo技术搜索引擎 网络搜索 efish 2008-1-17 7:17:14

一个函数指针传递的问题,困扰了我很久,望高手来解答

楼主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

责任编辑: efish 参与评论 查找更多:
相关文章
怎么让我的窗口自动在屏幕中居中 怎么让我的窗口自动在屏幕中居中
浮动广告、、怎么能在iframe 上面!!不被iframe 遮盖 浮动广告、、怎么能在iframe 上面!!不被iframe 遮盖
从MSsql到mysql,我要修改程序中多少地方? 从MSsql到mysql,我要修改程序中多少地方?
这个记录坐标位置的方法哪里不对? 这个记录坐标位置的方法哪里不对?
如何用sqldmo恢复数据库,急 如何用sqldmo恢复数据库,急
谁给我个放gif的控件,要Delphi6和CB5都能用的. xhyp… 谁给我个放gif的控件,要Delphi6和CB5都能用的. xhyph@21cn.com
关于设置JB8.0路径的问题。 关于设置JB8.0路径的问题。
这样检验某个制定目录的文件是否存在? 这样检验某个制定目录的文件是否存在?
讨论,ADO问题 讨论,ADO问题
RealPlayer怎么循环播放 mp3? RealPlayer怎么循环播放 mp3?
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn

分类导航
Readygo技术搜索引擎