Итак, я писал простую функцию среза в C, которая берет массив строк, строку, которая отмечает начало среза, и размер среза. в функции i malloc новый массив, а затем приступить к копированию по каждой строке в срезе в новый массив. однако, я получаю segfault в самом первом strcpy, хотя я уже malloced пространство для массива результатов.Strcpy segfaults после Malloc
код выглядит следующим образом:
char** slice(char** args, char* start, int size){
int i = 0;
// need to find start first
char* cursor = args[0];
int j = 0;
while(cursor != NULL){
if(strcmp(cursor, start) == 0){
break;
}
j++;
cursor = args[j];
}
char** result = malloc(MAX_INPUT * size);
while(i < size){
strcpy(result[i], args[j+i]);
i++;
}
return result;
}
линия, которая casues в Segfault есть -
strcpy(result[i], args[j+i]);
я использовал GDB, чтобы заглянуть в значение Что в результате и аргументах, результат [i] равен 0x0, что равно NULL, но результат сам по себе является адресом, но я не уверен, почему malloc не работает. у меня закончилось пространство стека? это означает, что я ввернута?
это вопрос о проблеме времени выполнения, поэтому опубликованный код должен быть скомпилирован, а при запуске отображается проблема. В опубликованном коде отсутствуют инструкции заголовка #include и нет драйвера для функции I.E. нет функции main() и описания описания параметра «args []» и никакого ввода примера. Поскольку проблема, кажется, связана с параметром argss [], код, который устанавливает этот параметр, должен быть опубликован – user3629249
опубликованный код не может проверить (! = NULL) возвращаемое значение, так как вы знаете, что malloc() не удалось? – user3629249
Что такое #define для MAX_INPUT? Как «размер» относится к параметру «args []»? – user3629249