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

Free(): invalid pointer in C program

我正在执行以下 C 程序并收到运行时错误“free():无效指针”

#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;
}