free怎么会报错,奇怪

这怎么错了, 指针-指指针

img

img


as代理费湖文化路口的骄傲很顺利的会计法哈萨克结婚快乐静安寺的话费卡拉斯积分换会计师费卡埃里克森几点回来发电量科技阿斯顿合法括号卡浩丰科技老好看的房间爱上课的积分换阿卡丽决胜巅峰合力科技奥数的法律看上的法兰克福合理的

你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;
}