Основываясь на том, что у вас есть в ваших вопросах, если вы заполняете pA в функции, я подозреваю, что вы не меняете содержимое pA, что может быть проблемой. Может быть полезно/полезно увидеть рутину, которую вы используете для заполнения pA.
Функции C вызывают по значению, если вы просто передаете указатель (просто pA), чтобы изменить значение указателя, вам нужно передать адрес указателя (указатель на указатель, если хотите). Затем вам нужно поклониться, чтобы установить указатель (на указатель), а затем поместить его дважды, чтобы установить значения в выделенной памяти/массиве.
Таким образом, вызов функции
void init(File *fpin, double **pA, int lines)
{
/* Deference once to set the pointer to the pitner */
*pA = (double *)malloc(lines*sizeof(double));
for (int i=0; i
а затем, вызывая процедуру, вам необходимо передать адрес pA.
init(fpIn,&pA,lines);
Here is a link which might help explain pointers to pointers:
http://www.thegeekstuff.com/2012/01/advanced-c-pointers/
Прошло много времени с тех пор, как я сделал указатели на указатели, но если вы используете вышеизложенное, возможно, вам придется внести некоторые незначительные изменения.
Как намекает ларсманс, мне нравится его предложение об изменении подпрограммы, чтобы вернуть указатель на выделенную память и поместить это значение в pA.
double* init(File *fpin, int lines)
{
double *local = (double *)malloc(lines*sizeof(double));
//Fills Array
for (int i=0; i
}
а затем в вызове init
pA = init(fpIn,lines);
В зависимости от того, чего вы пытаетесь достичь, это может быть легче понять и не так сложно.