下面程序为什么输出1.1#include <iostream> using namespace std; void fun(double *p1, double *p2, double *s) { s= new double; *s=*p1+*(p2++); } int main( ) { double a[2]={1.1,2.2}; double b[2]={10.0,20.0},*s=a; fun(a,b,s); cout<<(*s)<<endl; return 0; }
时间: 2024-02-29 08:56:34 浏览: 55
程序输出1.1的原因是因为函数fun中的参数s被重新指向了新的内存空间,并没有改变main函数中s所指向的a数组的地址,因此最终输出的结果仍然是1.1。具体来说,函数fun中的语句s= new double;将动态分配了一块新的内存空间,并使得参数s指向该空间,接着语句*s=*p1+*(p2++);计算p1所指向的值和p2所指向的值的和,并将结果存储到s所指向的新空间中。而在main函数中,变量s一开始指向了a数组的首地址,然后将s作为参数传递给函数fun,函数fun中的参数s被重新指向了新的内存空间,但这并不影响main函数中s所指向的a数组的地址。因此,最终输出的结果仍然是1.1。
相关问题
#include <iostream> using namespace std; void fun(double *p1, double *p2, double *s) { s= new double; *s=*p1+*(p2++); } int main( ) { double a[2]={1.1,2.2}; double b[2]={10.0,20.0},*s=a; fun(a,b,s); cout<<(*s)<<endl; return 0; }
这段代码中存在内存泄漏的问题,因为在函数fun中使用了动态内存分配,但并没有在函数结束前释放分配的内存。具体来说,fun函数中的语句s= new double;创建了一个新的double类型的变量,并将变量的地址赋给了参数s。但是在函数结束前,没有任何语句释放这个内存空间,导致内存泄漏。如果该函数被多次调用,那么每次调用都会创建一个新的内存空间,而没有任何一个函数释放这些空间,最终会导致程序的内存耗尽。
为了避免内存泄漏,可以在函数fun中加入释放内存的语句,如下所示:
void fun(double *p1, double *p2, double *s)
{
s= new double;
*s=*p1+*(p2++);
delete s; //释放内存
s = NULL; //释放后将指针置为空
}
这样就能够保证每次使用动态内存分配时都能够释放内存,避免内存泄漏的问题。
阅读全文