РЕДАКТИРОВАТЬ: я изменил свою программу в соответствии с предложениями, которые люди сделали, но я не могу исправить утечки памяти.Кроме того, мне нужно освободить их без использования argc, поэтому мне нужно каким-то образом отслеживать длину массива, чтобы я пометил последний элемент как нулевой.
В настоящее время я пишу программу на C, которая копирует аргументы командной строки в динамически размещаемый массив.Мой код выглядит так:
char **array;
int j;
array = malloc(sizeof(char*) * (argc + 1));
int i;
int index = 0;
for(i = 0; i < (argc); i++){
int length = strlen(*(argv + i));
array[i] = malloc((length + 1) * sizeof(char));
// Cycle through all the chars and copy them in one by one
for(j = 0; j <= length; j++){
array[i][j] = toupper(argv[i][j]);
}
}
array[i + 1] = NULL;
return array;
Позже я пытаюсь освободить память:
char** array_copy = array;
while(*array_copy != NULL){
free(*array_copy++);
}
free(*array_copy) // free the null at the end
free(array);
Тем не менее, я все еще получаю утечки памяти.Я не совсем уверен, что я делаю не так.Если бы кто-нибудь мог дать мне советы, это было бы здорово.
Спасибо!