Я пытаюсь вернуть массив из функции, он работает нормально, пока я использую жестко закодированное значение для размера массива.Однако, когда я изменяю его на динамический (вычисляемый из nproc = sysconf(_SC_NPROCESSORS_ONLN);
), я получаю следующее сообщение об ошибке:
-->gcc test.c
test.c: In function ‘getRandom’:
test.c:14:16: error: storage size of ‘r’ isn’t constant
static int r[nproc];
^
test.c:18:21: warning: implicit declaration of function ‘time’; did you mean ‘nice’? [-Wimplicit-function-declaration]
srand( (unsigned)time( NULL ) );
^~~~
nice
, когда я изменяю static int r[10];
на static int r[nproc];
, его сбой.Мне нужно сохранить динамический размер, так как он будет рассчитан во время выполнения.Может кто-нибудь помочь мне решить эту проблему?
Код:
#define _GNU_SOURCE
#include <assert.h>
#include <sched.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
/* function to generate and return random numbers */
int * getRandom(int nproc ) {
printf("nproc is %d\n",nproc);
//static int r[10];
static int r[nproc];
int i;
/* set the seed */
srand( (unsigned)time( NULL ) );
for ( i = 0; i < 10; ++i) {
r[i] = rand();
printf( "r[%d] = %d\n", i, r[i]);
}
return r;
}
/* main function to call above defined function */
int main () {
/* a pointer to an int */
int *p;
int i;
int nproc;
nproc = sysconf(_SC_NPROCESSORS_ONLN);
p = getRandom(nproc);
for ( i = 0; i < 10; i++ ) {
printf( "*(p + %d) : %d\n", i, *(p + i));
}
return 0;
}
Нужно знать, как этого добиться в C ПРОГРАММИРОВАНИЕ