首页 > 解决方案 > 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);
}

谁能建议我解决方案?

标签: cdynamic-memory-allocationfreec-stringscalloc

解决方案


这个电话

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

(注:看来你的意思

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

尾注)

使用幻数仅动态分配一个大小等于10的内存范围。因此,您只需为分配的范围调用一次该函数。那就是应该被调用多少次或被调用相同的次数。4 * 1040freemalloccallocfree

我怀疑您的意思类似于以下内容

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

推荐阅读