为什么我用指针变量做形参传递值,有的传递出来了,有的显示CXX0030:错误:无法计算表达式的值 15

在主函数里不管我用new,delete申请存储空间,还是maclloc和free,都不行,而且很奇怪的是我需要传递出4个int值,有两个可以传递出来,两个不行,传递出来的... 在主函数里不管我用new,delete申请存储空间,还是maclloc和free,都不行,而且很奇怪的是我需要传递出4个int值,有两个可以传递出来,两个不行,传递出来的两个一个我是用new,delete为int指针申请存储空间的,一个干脆用了一个一维数组。可另外两个用数组一个乱码,一个值会在调用程序返回是跳成0。换成指针,就出现CXX0030:错误:无法计算表达式的值,不知道有没有高手指点一下,这是怎么回事?
我不是说了嘛,我用new和delete申请内存了,怎么还会是野指针呢!而且有的传递出来了,有的传递不出来,
int ellipseNum[1];
int Num=new int[1];
int * f1=new int[1];
int* f2=new int[1];
ellipseNum[0]=0;
*Num=0;* f1=3;*f2=3;
然后调用函数function( contour,UPDOWN3DPinnts,Num,ellipseNum,f1,f2);
设断点在这句通过F11,进入函数体语句F10单步运行返回时,ellipseNum值传递出来了,f2传递出来了,但Num,和ellipseNum的内存里显示CXX0030:错误:无法计算表达式的值,而在返回前通过设置监视值看到f1和Num对应的函数形参内的值还是有的。
展开
 我来答
402407
2012-11-20 · TA获得超过771个赞
知道小有建树答主
回答量:726
采纳率:50%
帮助的人:910万
展开全部
指针变量其实就是一个变量,指向一个地址符的变量。
int *a; 指向一个数值型地址的变量a
如果就这样声明并应用的话,a是一个野地址,谁也不知道*a的值是多少,如果a=0,那么*a就会出现逻辑错误。比如
int *a = 0; // a=NULL
printf("%d", *a); // 提示Segmentation fault
如果将非NULL的a传入函数,比如void f(int *a),那么可以将a指向的地址的值进行转换。
比如
void f(int* a) { *a=1; }
int *a = new int;
f(a);
printf("%d", *a); // 输出1
但是如果你期望不管a是否等于NULL,都传出一个指向1的数值指针。
那么就应该将a传地址引用
比如
void f(int* &a) {if (a == NULL) a = new int; *a=1; }
int *a = 0;
f(a);
printf("%d", *a); // 输出1
咔嚓啾啾
2012-11-20 · 超过17用户采纳过TA的回答
知道答主
回答量:49
采纳率:100%
帮助的人:41.6万
展开全部
还是贴点代码出来直观些

int Num=new int[1]; 不是指针为什么分配空间呢.
function()的原型也贴出来看看吧.
追问
这个是我打错了,function很长而且做成*.dll了
程序应该没有问题,我做成exe运行过,而且在fuction返回前我把原来通过Num传递的值赋给ellipseNum,就传递出来了,感觉问题就出在形参的对应实参的内存管理的问题,不知道我分析对不?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
aizhang488
2012-11-20
知道答主
回答量:6
采纳率:0%
帮助的人:3.4万
展开全部
动态申请内存时要用指向指针的指针
追问
为什么,我试了一下好像不行耶
追答
当用指针变量做参数时 假设为 int *p (参数)当在函数内部操作时编译器其实会为p产生一个副本_p,  具体的你可以去看看林锐的文章。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式