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