四十不环 发表于 2018-9-1 23:56:00

为什么用VC++6.0执行时释放两个内存空间会报错?

本帖最后由 四十不环 于 2018-9-1 23:59 编辑

为什么用VC++6.0执行时释放两个内存空间会报错?
#include<stdio.h>
#include <stdlib.h>

int main()
{

        double *fDouble;                /*定义实型指针*/
        int* iInt;                                /*定义整型指针*/
        fDouble=(double*)malloc(sizeof(double));/*使用malloc为分配实型空间*/
        printf("%d\n",sizeof(*fDouble));        /*输出空间的大小*/
        iInt=realloc(fDouble,sizeof(int));        /*使用realloc改变分配空间大小*/
        printf("%d\n",sizeof(*iInt));
        free(fDouble);
        free(iInt);
        return 0;
}
如果删除掉两个free()语句又能正常执?
请问各位前辈这是怎么回事呢?

claws0n 发表于 2018-9-2 00:21:09

{:10_245:}
你怎么把数据类型给换了?
iInt = (int*)malloc(sizeof(int));

你这样申请内存等于没有申请,malloc(n * sizeof(int)); 需要几个就用 n 注明。不过你要这样操作也可以问题是 iInt = realloc(fDouble, sizeof(int)) 时,iInt 与 fDouble 都是指向同一个申请空间的,所以只需要释放其中一个。系统在抱怨说:”不是刚刚才释放吗?“
页: [1]
查看完整版本: 为什么用VC++6.0执行时释放两个内存空间会报错?