下面只是一个测试代码,我一直在尝试解决问题(这是我当前项目代码中的相同问题,这只是一种更简单的方式来展示它).
#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()无效指针所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)