Проблема создания массива Dynami c и заполнения случайных чисел - PullRequest
0 голосов
/ 25 мая 2020

* Я получаю сообщение об ошибке, когда хочу ввести случайные числа в массив. Я думаю, что проблема в указателях Ошибка здесь ' ptr [i] [j] = rand ()% 40000 +5; ' * Имя ошибки: значение с индексом не является ни массивом, ни указателем ни вектор

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int* create_matrix_fill_random (int satir,int sutun);


int main()
{
    srand(time(NULL));
    printf("Matrix automatically created 3x3");
    int a=3;
    int *matrix = create_matrix_fill_random(a,a);

    return 0;
}

int* create_matrix_fill_random (int row, int col)
{
    int *ptr;
    ptr = malloc(row*col*sizeof(int));
    int i,j;
    for (i=0;i<row;i++){
        for (j=0;j<col;j++){
        ptr[i][j]= rand() % 40000 +5;
    //Mistake ^ ^ ^ ^ ^ ^ 
        }
    }
    return ptr;
}

Ответы [ 2 ]

2 голосов
/ 25 мая 2020

Переменная ptr внутри функции имеет тип int *. Таким образом, применяя оператор индексации один раз, например ptr[i], вы получите скалярный объект типа int, для которого вы не можете применять оператор индекса во второй раз.

Если ваш компилятор поддерживает массивы переменной длины, тогда вы можете написать

int ( *matrix )[a] = create_matrix_fill_random(a,a);

, и функция будет выглядеть как

int ( * create_matrix_fill_random (int row, int col) )[]
{
    int ( *ptr )[col];
    ptr = malloc( sizeof( int[row][col] ) );
    int i,j;
    for (i=0;i<row;i++){
        for (j=0;j<col;j++){
        ptr[i][j]= rand() % 40000 +5;
        }
    }
    return ptr;
}

В противном случае вам нужно написать

int **matrix = create_matrix_fill_random(a,a);

, и функция будет выглядеть как

int ** create_matrix_fill_random (int row, int col)
{
    int **ptr;
    ptr = malloc( sizeof( row * sizeof( int * ) );

    int i,j;

    for ( i = 0; i < row; i++ )
    {
        ptr[i] = malloc( col * sizeof( int ) );
    }

    for (i=0;i<row;i++){
        for (j=0;j<col;j++){
        ptr[i][j]= rand() % 40000 +5;
        }
    }
    return ptr;
}
1 голос
/ 25 мая 2020

У вас есть одномерный массив, поэтому вы можете использовать только один индекс.

ptr[i * cols + j]= rand() % 40000 +5;
// ^^^^^^^^^^^^^^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...