glibc检测到free()无效指针

glibc检测到free()无效指针,第1张

概述我在动态内存分配方面遇到了一些麻烦. 下面只是一个测试代码,我一直在尝试解决问题(这是我当前项目代码中的相同问题,这只是一种更简单的方式来展示它). #include<stdlib.h>#include<stdio.h>#include<assert.h>int main(){ int x = 5; int *ptr = (int*) malloc(sizeof(int) 我在动态内存分配方面遇到了一些麻烦.

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

#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分配的对象.

总结

以上是内存溢出为你收集整理的glibc检测到free()无效指针全部内容,希望文章能够帮你解决glibc检测到free()无效指针所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1236648.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存