6348|12

79

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于使用VS2005开发WINCE程序中,指针引用的问题 [复制链接]

我把VC6下的程序向VS2005下转,使用自己编译的ARMV41 SDK,结果程序调试的时候发现走到一处需要指针引用传入的函数时,报错
函数如下:
        _ADRS *_ADRS::find(_ADRS *&pHead)
        {
                if(pHead==NULL)
                {
                        pHead = new _ADRS;
                        return pHead;
                }
                if(pHead->dwAddr<=0) return pHead;
                return find(pHead->pNext);
        }
其中 _ADRS 是我自定义的一个单向链表,这个函数是为了找到一个dwAddr<=0的链表位置。
我有一个全局指针 _ADRS *pAdrs;初始化为NULL,当第一次执行这个函数的时候,这个指针会获得空间分配,之后如果没有满足的dwAddr值就一直在尾加这个链表。
该函数在VC6下执行完全没有问题,我不明白为什么在WINCE下不能执行。

我试过了,如果不用指针引用的话 _ADRS *_ADRS::find(_ADRS *pHead) 程序调试不报错,但那样这个函数功能也就废了。
此帖出自WindowsCE论坛

最新回复

不知,帮顶  详情 回复 发表于 2008-5-1 13:38
点赞 关注
 

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
wince下发生什么错误了?
此帖出自WindowsCE论坛
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
运行到这个函数的时候,提示 There is no source code available for the current location。
此帖出自WindowsCE论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

4
 
哈哈,你的调试的二进制,和你的代买没有对应上,Rebuild all,然后重拾,或者是你的编译器设置有代码优化?
此帖出自WindowsCE论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

5
 
解决这个问题有几种方式:
1:clean and rebuild, 一般可以解决大部分问题。

2:Tools | Options | Debugging | Native | Load DLL exports ,勾上以后,听说有些人可以解决问题

(其他一些选项,可以看看 ……|debugging|General (里面有很多设置)

3:正对某个单独文件出现这个问题(以下是我的解决方式)

    由于一个文件出现问题,你可以删除整个cpp中的内容,只留下几个必要的函数,然后看调试能不能运行到函数中,是否正常,如果还是不正常,一直可以减到只 剩下一个构造函数(看编译中出现的错误)。如果正常,在加一些东西,这时可能可以把原来的内容全部加上都ok的
此帖出自WindowsCE论坛
 
 
 

回复

72

帖子

0

TA的资源

纯净的硅(中级)

6
 
前天用VS2005写了个对话框程序,运行正常,能调试;昨天拷贝了一个按钮,然后就不能调试了;删除此按钮,能正常调试;
可能要做如下处理,才能调试:
1)项目属性--> C++ -->调试信息格式 ,选择 用于“编辑并继续”的程序数据库(/ZI)
2)项目属性--> C++  -->优化 选择 禁用(/Od)
此帖出自WindowsCE论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

7
 
_ADRS *_ADRS::find(_ADRS *&pHead)
指针的引用是什么目的。
那把指针的引用改为指针或 指针的指针呢?
_ADRS *_ADRS::find(_ADRS *pHead)

_ADRS *_ADRS::find(_ADRS **pHead)

此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

8
 
崩溃了快,新建立了一个工程把代码一点点拷贝进去,那个There is no source code available for the current location。提示倒是没了,不过有提示指针无效。


做实验:
_ADRS *pHead = NULL;
_ADRS *p = _ADRS::find(pHead);
成功

而实际代码形式为:
struct aaaa
{
   ....
   ....
   _ADRS *pHead;

   aaaa():pHead(NULL){}
   _ADRS *find()
   {
     return _ADRS::find(pHead); //ADRS的find函数是静态的
   }
};
aaaa *p = new aaaa;
_ADRS *pp = p->find();

这时候程序出错,自动跳转到
__declspec(noinline)
static
void
WINAPI
WinMainCRTStartupHelper
    (
    HINSTANCE hInstance,
    HINSTANCE hInstancePrev,
    LPWSTR lpszCmdLine,
    int nCmdShow
    )
{
    int retcode;

    __try
        {
        _cinit(); /* Initialize C's data structures */

        retcode = _tWinMain(hInstance, hInstancePrev, lpszCmdLine, nCmdShow);

        exit(retcode);
        }
    __except (_XcptFilter(retcode = GetExceptionCode(), GetExceptionInformation()))
        {
        /*
         * Should never reach here unless UnHandled Exception Filter does
         * not pass the exception to the debugger
         */
        _exit(retcode);
    } /* end of try - except */
}

救命啊!!!!!!!!!!!!!!
此帖出自WindowsCE论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

9
 
回lenux :
其实我就是在一个结构体里,先预留一个链表头指针,然后随着函数的调用,第一次,这个指针将在函数里被new出来,由于是引用,所以可以保存到结构对象里去。之后的函数调用,就是在这个指针的基础上,尾加链表了。

我也想改成××算了,不过那样就要改n多代码了,天啊~
此帖出自WindowsCE论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

10
 
嗬嗬,你可以试先改一个,然后做个demo测试一下,如果可行再改。
此帖出自WindowsCE论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

11
 
改用**试过了,一样的问题,口吐白沫了已经,难道是静态函数不能放在结构的成员函数里用?不能吧
此帖出自WindowsCE论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

12
 
不明LZ在说什么
此帖出自WindowsCE论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

13
 
不知,帮顶
此帖出自WindowsCE论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表