Пожалуйста, смотрите здесь для обсуждения чего-то подобного. Причина, по которой он вызывает ошибку, заключается в том, что вы не передаете указатель на указатель на int из функции intMatrixAll
в основную подпрограмму. Другими словами, вы передаете параметр двойного указателя на int по значению , а не по reference и пытаетесь получить доступ к testMatrix
, хотя на самом деле он все еще был NULL
.
Таким образом, вам нужно добавить еще один уровень косвенности, то есть *
, и использовать эту косвенность в качестве средства для изменения двойных указателей на malloc
d и для основной процедуры, чтобы увидеть, что testMatrix
действительно выделен ,
См. Ответ Р. Самуэля Клатчко выше.
Как правило, если вы хотите передать указатель на что-либо как параметр по ссылке , добавьте еще один уровень косвенности. В вашем случае вы передаете двойной указатель на int, сделаете параметр тройным указателем в функции.
int **testMatrix;
void intMatrixAll(int row, int col, int ***matrix){
// In here use this (*matrix)
}
// Then the calling of the function would look like this
intMatrixAll(testArrRow, testArrCol, &testMatrix);
// Note the ampersand above to treat this double pointer passed in by reference
Надеюсь, что это помогает и имеет смысл,
С наилучшими пожеланиями,
Том.