这怎么错了, 指针-指指针
你ps=&s后,前面申请空间的地址就被冲掉了。你现在free的是s的存储地址,当然不行了啊
因为你将ps指向了临时变量s。故p已经不再指向由malloc申请的空间了,free函数只能用来释放malloc这些函数申请回来的空间
ps = &s后,malloc申请的空间就丢失了,ps指向s的地址,free(ps)释放的是s的地址,但是s的空间是由系统自动分配的内存,系统会自动回收,所以free(ps)就会导致s所占内存的重复回收,编译器就会报错。
如果让ps = &s; malloc和free那一行是需要删掉的。
这么改,找下感觉:
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
double s = 3.14;
double* ps = (double*)malloc(sizeof(double));
*ps = s;
printf("%lf\n", *ps);
free(ps);
ps = NULL;
ps = &s;
printf("%lf\n", *ps);
ps = NULL;
return 0;
}