2D массив в C -> segmentation fault (core dumped)
Привет, ребята...
Я использую C для создания 2d-массива без полного успеха.Я получаю следующую ошибку:
Segmentation fault (core dumped)
Объяснение кода:
Сначала я даю строки и cols через вход, а затем печатаю 2d_array со случайными числами от 1 до 100.
Когда print_2d_array (.....) собирается запустить, я получаю вышеуказанную ошибку.
Код:
Что я уже пробовал:
#include <stdio.h> #include <stdlib.h> #include <time.h> int rows_col(char *str); int randomness(); void print_2d_array(int **array , int rows , int cols); int main(void) { srand(time(NULL)); int **array_2d; int rows = rows_col("rows"); int cols = rows_col("columns"); array_2d = malloc(sizeof(int) * rows * cols); print_2d_array(array_2d , rows , cols); printf("\n\n\n"); free(array_2d); } int rows_col(char str[10]) { int num = 1; printf("Give the number of %s: " , str); do { if(num <= 0) { printf("This is a negative/zero number.Please try again.\n"); printf("Give the number of %s: " , str); } scanf("%d" , &num); } while(num <= 0); return num; } int randomness() { return ( (rand() % 100) + 1); } void print_2d_array(int **array , int rows , int cols) { for(int i = 0; i < cols; i++) { for(int j = 0; j < rows; j++) { array[i][j] = randomness(); printf("%d\t" , array[i][j]); } printf("\n"); } }
Я хочу, чтобы вы помогли найти/решить эту проблему.
Заранее спасибо!!!
jeron1
Одна вещь,
Скрыть скопировать код while(num <= 0);
Как только этот цикл начинается, он не останавливается (бесконечный цикл).
редактировать: полный brainfart.
OriginalGriff
Нет, это конец света. do { ... } while (num <=0);
jeron1
Действительно, надеюсь, что это самая глупая вещь, которую я говорю сегодня, пытаясь снова включить мозг...
Nick_is_asking
Я не согласен ,потому что ,когда приходит оператор do, вызывается scanf, поэтому он ждет пользователя, а затем проверяет номер.Вот как работает do while
Я проверил его, и он работает, как я и ожидал.
jeron1
Дох! Вы абсолютно правы, мои извинения! видимо, мой кофеиновый кайф прошел.
k5054
обратите внимание, что вы столбцы/строки задом наперед: если вы просите 5 строк и 3 столбца, вы на самом деле распечатываете 3 строки по 5 столбцов в каждой.