【发布时间】:2020-03-07 15:41:38
【问题描述】:
在我的last question 中,我询问了如何使用函数来释放一个 malloc 的数组,我想改进我的代码,以便该函数不仅会释放内存,还会将指针设置为 @ 987654322@一旦完成清理。 此外,我想要一个函数来同时执行 - 设置和清除,这取决于我传递的 command,这就是我到目前为止所做的:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdint-gcc.h>
char **set_arr(int number, char *command);
int command_read(char *command);
void clear_arr(char *arr[], int size);
char set[] = "set";
char clear[] = "clear";
int main() {
int num = // get number from user;
char** my_arr = NULL;
my_arr = set_arr(num, set);
// so far the code works as excepted
set_arr((size_t)&my_arr, clear);
return 0;
}
int command_read(char *command) {
if (strcmp(command, set) == 0)
return 'S';
if (strcmp(command, clear) == 0)
return 'C';
}
char **set_arr(int number, char *command) {
static char **arr = NULL;
static int size;
switch (command_read(command)) {
case 'S':
size = (int)number;
arr = malloc((size + 1) * sizeof(char *));
for (int i = 0; i <= size; i++) {
arr[i] = NULL;
if (i == size)
break;
arr[i] = malloc((string_len) * sizeof(char));
}
break;
case 'C':
clear_arr(arr, size);
free(arr);
uintptr_t value = number;
uint64_t *temp = (void *)value;
*temp = 0x0;
break;
}
return arr;
}
void clear_arr(char *arr[], int size) {
for (int i = 0; i < size; i++) {
free(arr[i]);
arr[i] = NULL;
}
}
我知道有更好的方法来清除(并分配内存?)但我的主要问题是,我是否释放了为数组分配的所有内存,并且在清除后,指针 my_arr 是否设置正确到NULL?
【问题讨论】:
-
将一个指向
size_t的指针传递给int至少不是一个好主意。包含指针可能还不够,也不需要它。