Аргументы-указатели и динамическая матрица, проблема с реализацией функции - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! У меня следующая проблема: в main определена переменная-указатель на указатель(к примеру

char **ptr;

), необходимо написать функцию, которая бы создала матрицу при помощи ф-й выделения дин.памяти, присвоила элементам некоторые значения, и чтобы этот ptr в итоге указывал бы на эту матрицу. Т.е. суть в том, чтобы выделение памяти было вне

main()

, но в тоже время, чтобы можно было из

main()

освободить память, выделенную под ту матрицу без использования статических,глобальных и т.п. переменных. Вот мой очень грубый пример, чисто для иллюстрации идеи.
...
void matr( int size, char ***ptr, char *data )
     {
      *ptr = (char **) calloc( size, sizeof(char *) );
      for( int i=0; i<size; i++ )
           {
         *ptr[i] = (char *) calloc( size, sizeof(char) );
         strcpy( *ptr[i], data); 
           }
          printf("%s",*ptr[1]);              
     }
...
int main( )
         {
           ...
           char **PTR = NULL;
 
           matr( 2, &PTR, "13" );
           printf("\n%s",ptr[1]);
           ...
         }
В результате в консоли имеем
13
(null)
Когда строится матрица 3x3 и больше то программа крашится при обращениях из

main()

, память внезапно оказывается не выделенной, кроме первых двух эл-тов. Почему так произошло и как этого избежать?

Решение задачи: «Аргументы-указатели и динамическая матрица, проблема с реализацией функции»

textual
Листинг программы
int create_matrix(char ***p, int rows, int cols);

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы