Я пытаюсь записать данные в двумерный массив переменной длины, и моя программа сохраняет seg-faulting, когда я вызываю myfunc
, но он отлично работает, когда я пытаюсь выполнить ту же манипуляцию за пределами функция. Я могу сказать, что проблемы заключаются в том, что адрес, указанный в массиве [0], не равен адресу, указанному в данных [0]. Может ли кто-нибудь посоветовать мне о первопричине этой проблемы и надлежащем способе перезаписи myfun
.Манипулировать двумерный массив переменной длины с помощью функции
void myfun(unsigned char **array){
printf("array = %p, array[0] = %p\n", array, array[0]);
//This line below causes a segfault
strcpy(array[0], "Position0");
}
int main(void) {
int row = rand() % 5 + 1; // random number between 1-5
int col = rand() % 10 + 20; // random number between 20-29
unsigned char data[row][col];
printf("data = %p, data[0] = %p\n", data, data[0]);
//This function call causes a segfault
myfun(data);
printf("%s\n", data[0]);
//This works
strcpy(data[1], "Position1");
printf("%s\n", data[1]);
return 0;
}
В вашем тексте вы говорите, что получаете операцию segfault при выполнении операции внутри 'myfun', но не тогда, когда вы выполняете ее вне функции; комментарий в вашем коде говорит наоборот. – Beta
Я только что обновил комментарии в коде, чтобы быть более понятным. Строкой, вызывающей segfault, является «strcpy (массив [0],« Position0 »); – jprince14
Ваш компилятор должен был предупредить вас, что 'char [x] [y]' несовместим с 'char **', и вы должны были прослушать это предупреждение, потому что это правда. Если он вас не предупредил, узнайте, как включить предупреждения. –