You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用char*直接赋值后调用realloc触发invalid pointer错误的原因

realloc(): invalid pointer 错误原因解析

先看你的代码:

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

int main()
{
    
    char *cp;
    
    cp = (char *)malloc(10 * sizeof(char));
    cp="kerem";
    //strcpy(cp, "kerem");
    printf("%s",cp);
    cp=(char *)realloc(cp,30 * sizeof(char));
    //strcpy(cp, "kerem demir Aziz Kerem Demir");
    cp= "kerem demir Aziz Kerem Demir";
    printf("%s",cp);
    //free(cp);
 
   return 0;
}

核心问题:指针指向的内存区域不合法

  • 执行cp = (char *)malloc(10 * sizeof(char));时,cp指向堆上分配的内存块,这是realloc/free的合法操作对象。
  • 但cp="kerem";直接改变了cp的指向——它不再指向之前malloc分配的堆内存,转而指向字符串常量"kerem"所在的只读数据段内存,这部分内存并非通过malloc/calloc/realloc分配。
  • realloc的规则明确:第一个参数必须是从malloc/calloc/realloc获取的堆内存指针,或者是NULL。你传入字符串常量的地址,不符合要求,因此触发realloc(): invalid pointer错误。

为什么用strcpy就没问题?

strcpy(cp, "kerem");并没有改变cp的指向——它仍然指向malloc分配的堆内存,只是把"kerem"的内容复制到了这块堆内存里。此时cp还是合法的堆内存指针,后续调用realloc自然不会报错。

额外提醒

你最后写的cp= "kerem demir Aziz Kerem Demir";同样是让cp指向字符串常量,如果打开注释执行free(cp);,也会触发类似的free(): invalid pointer错误,因为free只能释放堆内存,不能操作字符串常量的内存。

内容的提问来源于stack exchange,提问作者kerem0101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 02:35:19