Ошибка assignment makes pointer from integer without a cast [enabled by default] - C (СИ)
Формулировка задачи:
выделяю память в Main - всё работает. Пытаюсь сделать функцию - куча ошибок.
#include<stdio.h>
#include<stdlib.h>
#define n 5
void create(int ***A);
void destroy(int **A);
void prt(int **A);
int main()
{
int **A,i,j;
create(&A);
prt(A);
destroy(A);
return(0);
}
void prt(int **A)
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
printf("A[%d][%d] = %d\n",i,j,A[i][j]);
}
void destroy(int **A)
{
int i,j;
for(i=0;i<n;i++)
free(A[i]);
free(A);
}
void create(int ***A)
{
int i,j;
(*A) = (int**)malloc(n*sizeof(int*));
for(i=0;i<n;i++)
(*A[i]) = (int*)malloc(n*sizeof(int));
for(i=0;i<n;i++)
for(j=0;j<n;j++)
A[i][j] = rand()%100;
}Решение задачи: «Ошибка assignment makes pointer from integer without a cast [enabled by default]»
textual
Листинг программы
A[i][j] = rand()%100;//Присваивание целочисленного значения указателю. У Вас A объявлена как int ***
Объяснение кода листинга программы
- Объявление переменных:
- i, j (указатели на строки массива A)
- A (указатель на массив строк)
- В каждой строке массива A выделить память под новую строку с помощью оператора new
- В каждой новой строке выделить память под новый массив с помощью оператора new
- Для каждого элемента нового массива (A[i][j]) присвоить случайное значение от 0 до 99 с помощью функции rand()
- Ошибка assignment makes pointer from integer without a cast [enabled by default] возникает из-за того, что вы пытаетесь присвоить целочисленное значение указателю, не приведя его к типу указателя. В вашем случае, переменная i и j являются указателями, а вы пытаетесь присвоить им целочисленное значение без явного приведения типов.