我正在尝试释放一个二维字符数组,但是当我用fsanitize=address
编译并运行程序时,出现了内存泄漏。看起来代码free(innerArray)
并没有释放单个字符数组。有什么想法吗?
struct Item {
char* line;
struct Item *next;
};
void mainMethod(Item *firstArgument) {
// Create 2d array
int r = 5; // r gets some number
char **myargs = malloc((r+1)* sizeof(char *));
myargs[0] = malloc((strlen(command)+1) * sizeof(char));
myargs[0] = command;
int i = 1;
struct Item* arg = firstArgument->next;
for ( ; i < r; i++) {
myargs[i] = malloc(((strlen(arg->line)+1)*sizeof(char)));
strcpy(myargs[i], arg->line);
arg = arg->next;
}
myargs[i] = NULL;
// do processing ...
// Free 2d array
int i = 0;
while (i <= r) {
char* innerArr = arr[i];
free(innerArr);
i++;
}
free(arr);
}
1条答案
按热度按时间5vf7fwbs1#
这将分配一个字符串,然后将其替换为地址
command
:正在泄漏分配的内存。如果不需要副本,请使用第2行,如果需要副本,请执行以下操作:
或将两行替换为:
和往常一样,您需要检查分配是否失败。
sizeof(char)
被定义为1
,因此您只需忽略它。