微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Free(): C 程序中的无效指针

如何解决Free(): C 程序中的无效指针

我正在执行以下 C 程序并收到运行时错误“free(): Invalid Pointer”

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

static void freeArgs(char** args);

int main()
{
    char** argv = calloc(4,10);
    int  argc = 0;

    argv[argc++]="yogita";
    argv[argc++] ="negi";
    argv[argc] = NULL;
    freeArgs(argv);
    return 0;
}

static void freeArgs(char** args)
{
    char** af = args;
    for (; *af; af++)
        free(*af);
    free(args);
}

谁能给我建议解决方案?

解决方法

free(*af);

尝试释放未通过 malloc/calloc 分配的内存:

argv[argc++]="yogita";

"yogita" 是一个字符串文字,因此不是动态分配的。你不能释放它的内存。

,

这个电话

char** argv = calloc(4,10);

(注意:你的意思是

char** argv = calloc( 4,sizeof( char * ) );

尾注)

使用幻数 10 仅动态分配一个大小为 4 * 10 的内存区,它等于 40。因此,您只需为分配的范围调用函数 free 一次。即 malloccalloc 被调用的次数与 free 应该被调用的次数相同。

我怀疑你的意思是这样的

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

static void freeArgs( char **args )
{
    char **af = args;
    
    while ( *af ) free( *af++ );
    
    free( args );
}

int main(void) 
{
    enum { N = 4,LEN = 10 };
    char **argv = calloc( N,sizeof( char * ) );
    
    size_t  argc = 0;
    
    argv[argc] = malloc( LEN * sizeof( char ) );
    strcpy( argv[argc++],"yogita" );
    
    argv[argc] = malloc( LEN * sizeof( char ) );
    strcpy( argv[argc++],"negi" );
    
    freeArgs( argv );
    
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。