glibc检测到free()无效指针

前端之家收集整理的这篇文章主要介绍了glibc检测到free()无效指针前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在动态内存分配方面遇到了一些麻烦.

下面只是一个测试代码,我一直在尝试解决问题(这是我当前项目代码中的相同问题,这只是一种更简单的方式来展示它).

#include<stdlib.h>
#include<stdio.h>
#include<assert.h>

int main(){

    int x = 5;
    int *ptr = (int*) malloc(sizeof(int));
    assert(ptr != NULL);
    ptr = &x;

    printf("x = %d\n",x);

    *ptr = 3;
    printf("x = %d\n",x);

    free(ptr);

    return 0;
}

程序编译很好,运行时我得到正确的输出打印“x = 5 x = 3”
但后来我得到了错误

glibc detected  ./dnam: free(): invalid pointer: 0xbfccf698

dnam是测试程序的名称.
从我读到的关于错误内容来看,它应该是由释放内存导致的,你没有malloc / calloc / realloc’d.

错误消息后跟回溯和内存映射.在内存映射结束时,我被告知程序已中止(核心转储).

解决方法

int *ptr = (int*) malloc(sizeof(int));

   ptr = &x;

你正在改变ptr值!如果您尝试释放它,编译器将进行无限复仇.

这里:

free(ptr);

您正在释放未通过malloc分配的对象.

猜你在找的C&C++相关文章