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);
}
谁能建议我解决方案?
解决方案
这个电话
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;
}
推荐阅读
- r - 当我在ggplot2中使用汉字时从rmarkdown生成的奇怪符号
- slack - How to predefine a message and send it in Slack chat?
- reactjs - 如何颠倒将项目添加到 final-form/react-final-form-arrays 中的字段的顺序,所以最近的是第一个
- android - Flutter Android build无法确定任务':app:compileDebugJavaWithJavac'的依赖关系Google Play服务错误
- rest - 2captcha 标志 ERROR_WRONG_GOOGLEKEY 但我提供了一个。这实际上是 ERROR_GOOGLEKEY 吗?
- python - Django - 在数据库中为数据类型几何(MultiPolygon)设置什么模型?
- python - 具有默认值的 Django 模型过滤器
- azure - Azure CDN 清除命令问题
- python - 如何将 pyqtgraph 图定位在窗口中的像素位置?
- sql - 正则表达式搜索 SQL 查询字段