Аргументы-указатели и динамическая матрица, проблема с реализацией функции - C (СИ)
Формулировка задачи:
Здравствуйте!
У меня следующая проблема: в main определена переменная-указатель на указатель(к примеру В результате в консоли имеем
Когда строится матрица 3x3 и больше то программа крашится при обращениях из
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)
main()
, память внезапно оказывается не выделенной, кроме первых двух эл-тов. Почему так произошло и как этого избежать?Решение задачи: «Аргументы-указатели и динамическая матрица, проблема с реализацией функции»
textual
Листинг программы
int create_matrix(char ***p, int rows, int cols);