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
一次。那就是 malloc
或 calloc
被调用的次数与 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;
}
我正在执行以下 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
一次。那就是 malloc
或 calloc
被调用的次数与 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;
}