Да, это опять один из этих вопросов, я знаю, что Inte rnet наводнен именно этой проблемой, но я не смог найти решение этой проблемы в других темах, так что я здесь.
Я получаю ошибку "reallo c () неверный следующий размер" в этом коде, который анализирует некоторый текст и помещает отдельные слова в массив строк, argv. Этот код очень прост, и есть еще много чего сделать, чтобы сделать этот код лучше, я полностью осознаю это.
В любом случае, я получаю эту ошибку, когда превышаю некоторое перераспределение переменной char ** argv. Как ни странно, это зависит от программного обеспечения, в котором я его запускаю. Например, при использовании CLion я получаю эту ошибку, когда пытаюсь проанализировать текст из 5 слов, а в Visual Studio - это текст из 3 слов, когда я получаю эту ошибку.
Итак, вот код, он принимает 3 параметра, первый - строка, буфер, в котором находится текст. Следующие 2 параметра передаются по ссылке, arg c и argv соответственно.
Это вызов функции:
char **argv = NULL;
int argc = 0;
//buffer is a string terminated with a zero
parse_line(buffer, &arc, &argv);
И это функция:
int parse_line(char *buffer, int *argc, char ***argv) {
int arg_cap = 10;
*argv = malloc(sizeof(char*));
(*argv)[0] = malloc(arg_cap);
int index_iter = 0;
for (int i = 0; buffer[i]; i++) {
if (buffer[i] == ' ') {
(*argv)[*argc][index_iter] = 0;
(*argv)[*argc] = realloc((*argv)[*argc], index_iter+1);
index_iter = 0;
arg_cap = 10;
(*argc)++;
*argv = realloc(*argv, sizeof(char*) * (*argc));
(*argv)[*argc] = malloc(arg_cap);
}
else {
index_iter++;
if (index_iter >= arg_cap) {
arg_cap *= 2;
(*argv)[*argc] = realloc((*argv)[*argc], arg_cap);
}
(*argv)[*argc][index_iter-1] = buffer[i];
}
}
(*argv)[*argc][index_iter] = 0;
(*argv)[*argc] = realloc((*argv)[*argc], index_iter+1);
(*argc)++;
return 1;
}
Надеюсь, вы сможете понять, в чем проблема. Спасибо, ребята.