Функция myFunction
выделяет A
, но это распределение существует только в пределах функции scope. Когда функция возвращает память, сохраняется A
. Это означает, что функция возвращает указатель на память, которая не была выделена.
Проблема в том, что переменная A
не сохраняется вне функции. Вы можете использовать глобальную переменную или передать указатель на буфер в myFunction
глобальной переменной метода:
static int A[3];
int* myFunction()
{
A[0] = 1; A[1] = 2; //etc
return A;
}
В этом примере, потому что A
является глобальным, память, на которую указывает A
сохраняется Повсеместно время вашей программы на всю жизнь. Поэтому безопасно вернуть указатель на него ...
В качестве побочного примечания глобальные переменные, вероятно, не должны использоваться таким образом ... это немного неуклюже. Использование ключевого слова static
означает, что A
не будет доступен за пределами этого модуля (файл C).
Метод Указатель:
void myFunction(a[3])
{
a[0] = 1; a[1] = 2; //etc
}
int main()
{
myA[3];
myFunction(myA);
// and continue to print array...
}
В этом примере функция main()
выделяет myA
. Эта переменная существует во время выполнения функции (это automatic variable). Указатель на массив передается в функцию, которая заполняет массив. Поэтому функция main()
может получать информацию от myFunction()
.
Другой способ сделать переменную myA
persist заключается в том, чтобы выделить ее в кучу. Для этого вы сделаете что-то вроде int *myA = malloc(sizeof(int) * NUMBER_OF_INTS_IN_ARRAY
. Эта память будет сохраняться до тех пор, пока вы ее не отсоедините, используя free()
или закончите программу.
Вы можете» t сделать это, потому что 'A' является локальным для' myFunction', и он заканчивается, когда 'myFunction' заканчивается, оставляя' main' с недопустимым указателем. (Также вы не объявили 'A' в' main'.) – Kninnug
Попробуйте вернуть адрес A' & A', а затем использовать его вне метода. – noMAD
Также будьте уверены, что ваш цикл 'for' никогда не запускается, потому что' j == 2' является ложным на первой итерации. Вероятно, вы имели в виду 'j! = 2', хотя' j <3' было бы лучше (чаще всего). – Kninnug