指针被莫名其妙的修改了!!求助啊!!大家好。。我有一个程序。。框架如下:int B(int *p){// 调用一个库函数库函
指针被莫名其妙的修改了!!求助啊!!
大家好。。我有一个程序。。框架如下:
int B(int *p)
{
// 调用一个库函数
库函数XXX(p);
}
int A(int * p)
{
char * ptr = (char*) malloc(20);
B(p);
}
现在的问题是,单在A函数中调用B函数后,指针ptr会被修改,使得它指向了别的一块内存区域。。。这样我程序中访问的时候。。。就会给出段错误。
请问为什么指针ptr会被修改的。。。函数B中并没有用到ptr指针啊。。。? 费解
更奇怪的是,指针p也会被修改。。。我在B函数中是改变了p指针所指向的区域的内容。。并没有改变p指针本身啊。。没有让它指向别的区域。。。
调试好久了。。。头疼啊。。。大家帮帮忙啊。。。
对了。。。AIX平台上。。什么调试工具还用啊。。DBX不会用啊。。。
[解决办法]
int A(int * p)
{
char * ptr = (char*) malloc(20);
B(p);
//是在这里以后发现p的内容改变了?还是在B函数里?
}
至于ptr为什么会在B里改变?你还是跑跑单步吧。。。
[解决办法]
十有八九是你的 B() 函数中对局部变量访问的时候越界,导致栈空间被冲毁。(如果你的 B() 函数真如你所示只有一行的话,那问题就是出在“库函数XXX(p)”中。
举个具体的例子,函数里定义了一个 char[10] 的局部变量,然后写进了 100 个字节,然后就咔咔……
————————————————————————————————
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)
