为什么指针地址改变了?

flysky 2008-06-25 09:30:33
比如如下程序实行时:
int main() {
SQLDA *pda;

...... // 这里有一系列处理

printf("%p", pda); // 此时该指针地址为435984
dataExc(pda);
printf("%p", pda); // 此时该指针地址变为了202020. 在dataExc中还是435984的呀,为什么这里会变了呢?
}

int dataExc(SQLDA *pda) {

...... // 这里有一系列处理
printf("%p", pda); // 此时该指针地址仍然为435984
return 0;
}
...全文
394 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
我看你有戏 2008-06-30
  • 打赏
  • 举报
回复

int dataExc(SQLDA *pda) {

...... // 这里有一系列处理
printf("%p", pda); // 此时该指针地址仍然为435984
return 0;
}

这里面是不是重新开辟了一块内存,把地址赋给pda了啊
flysky 2008-06-29
  • 打赏
  • 举报
回复
代码在公司带不回来,所以只能简单模拟一下
lixun_21 2008-06-28
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 ttzzgg_80713 的回复:]
感觉溢出了
[/Quote]
太乙 2008-06-28
  • 打赏
  • 举报
回复
帖全了!涉及到那个指针的代码全贴出来!
vb00001 2008-06-28
  • 打赏
  • 举报
回复
转到反汇编看一下就明白了~
lwouyang 2008-06-28
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 cplusplusnew 的回复:]
可能在dataExc里面的某些操作越界了吧。。
[/Quote]
同意!
另外一种可能,LZ在执行以上代码的时候被3¥%……#¥56程序盯上了.
[Quote=引用 2 楼 baihacker 的回复:]
最好能有全部代码
[/Quote]
ttzzgg_80713 2008-06-26
  • 打赏
  • 举报
回复
感觉溢出了
gygl_4 2008-06-26
  • 打赏
  • 举报
回复
我还是觉得你的子函数有问题,譬如说进行的操作使得原来的内存单元被覆盖了
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 iu_81 的回复:]
当你调用dataExc时会传递过去一个指针pda,两个pda同时指向一个地方,这时你可以通过*pda修改数据的值但是不能为pda分配空间,是两个不同的指针。
[/Quote]
学习了……
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 baihacker 的回复:]
最好能有全部代码
[/Quote]
胡椒爸爸 2008-06-26
  • 打赏
  • 举报
回复
可能在dataExc里面的某些操作越界了吧。。
flysky 2008-06-26
  • 打赏
  • 举报
回复
很感谢大家积极踊跃的探讨,经今天的调查,发现确实存在一个定义字符数组溢出的问题.
原来程序里定义一个char workbuff[1024],是用来临时存储检索到的数据的.
因为现在做的项目是一个系统升级的项目.从原来32位HP-UX升级到64位新的HP-UX,数据库从oracle8.1.3升级到10g,
应用程序还是保持32位的.现在跑程序发现workbuff存储数据的长度达到40000多了,怀疑可能是oracle变化导致现在数据所占的字节数增大了.继续调查中.....
animalgogogo 2008-06-26
  • 打赏
  • 举报
回复
为什么要使用空指针呢?
hai040 2008-06-26
  • 打赏
  • 举报
回复
再加一个参数SQLDA** ptest,传&pda
在return前打印一个*ptest
函数里的pda和外面的不是同一个,可能外面的被改了
打印里面的pda说明不了问题
ForestDB 2008-06-26
  • 打赏
  • 举报
回复
有没有越界什么的?
HelloDan 2008-06-26
  • 打赏
  • 举报
回复


#include "stdio.h"


int main()
{
int test(int* pt);
int val=90;
int* pt=&val;
printf("%p\n",pt);
test(pt);
printf("%p\n",pt);


return 0;
}

int test(int* pt)
{
printf("%p\n",pt);
return 0;
}



0022FF74
0022FF74
0022FF74


Terminated with return code 0
Press any key to continue ...
//至少我这样还是一样的,楼主的应该在某个地方有改到的。请贴出全部代码来看一看。
雨过白鹭洲 2008-06-25
  • 打赏
  • 举报
回复
CU顶完这边顶

楼主,你确定是这样的吗?
qiang81020 2008-06-25
  • 打赏
  • 举报
回复
你确定没有别的操作了么??
artman 2008-06-25
  • 打赏
  • 举报
回复
请着重检查与pda前后定义的变量(特别是char[]缓冲区)的使用是否越界了.
artman 2008-06-25
  • 打赏
  • 举报
回复
关注, 可能是程序某处错误所致.
加载更多回复(4)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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