C语言内存使用问题 malloc(): memory corruption: 0x00007f3494014240 ***

在C语言中,我们不可避免的经常使用malloc()申请动态内存和free()释放内存,但是使用不当很容易导致程序崩溃:

通常我们会犯的内存问题大概有以下几种:

1.内存重复释放,出现double free时,通常是由于这种情况所致。
2.内存泄露,分配的内存忘了释放。
3.内存越界使用,使用了不该使用的内存。内存越界使用,这样的错误引起的问题存在极大的不确定性,有时大,有时小,有时可能不会对程序的运行产生影响,正是这种不易重现的错误,才是最致命的,一旦出错破坏性极大。
4.使用了无效指针,已释放对象,却再次操作该指针所指对象,多线程中某一动态分配的对象同时被两个线程使用,一个线程释放了该对象,而另一线程继续对该对象进行操作。
5.空指针,对一个空指针进行操作。

常见的崩溃:

        1.free(): invalid next size (fast): 0x00007f89d001a790 ***

在使用malloc申请后,使用free()释放内存导致程序崩溃,这个问题好办,一般是释放的内存位置不对导致,可以在程序中加上判断。

例如:

char *buf = (char *)malloc(32);
//申请一段内存空间,一定要判断是否申请成功,成功则使用memset()清除一下
if(buf == NULL){
    printf("malloc err!");
    return -1;
}else{
    memset(buf, 0, 32);
}

//释放内存
//一定要判断内存是否存在
if(buf) free(buf); 

        2.malloc(): memory corruption: 0x00007f3494014240 ***,corrupted size vs. prev_size: 0x00007fe6a401a720 ***

strcat,vsprint,memcpy, memset, memmove这些函数在操作申请的内存空间时候容易产生越界导致程序崩溃。 


value = (char *)sqlite3_column_blob(stmt , i);
tbInfo->table[row][i] = (char *)malloc(strlen(value)+1); //add+1 解决
sprintf(tbInfo->table[row][i], "%s", value);

下面这个代码是我自己在项目中遇到的,当我malloc(strlen(value)),程序运行起来总是报.malloc(): memory corruption: 0x00007f3494014240 ***或者corrupted size vs. prev_size: 0x00007fe6a401a720 ***错误,找了好几天,定位到大致位置,但是一直没有解决问题,在网上查了很久,发现这个链接解决了我的问题https://www.coder.work/article/2186544(非常感谢),我在malloc(strlen(value)+1),我在后面申请空间+1,就解决程序一直崩溃问题。

        可能其他人遇到的问题和我不同,但是相同的是使用内存越界就会导致程序崩溃,所以遇到上述报错问题,请检查strcat,vsprint,memcpy, memset, memmove等这些函数,看看使用的内存地址是否越界。

        小白记录,不足请多多指教。

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值