2016-06-10 3 views
-1
int funkcija(int broj) 

{ 

    int *niz; 
    int i; 

    *niz = (int*)malloc(broj*sizeof(int)); 

    srand(time(NULL)); 

    for (i = 0; i < broj; i++) 
    { 
     niz[i] = rand() % 50; 
     printf("%d\n", niz[i]); 
    } 

    return *niz; 

} 

Мне нужно сделать функцию, которая принимает число, динамически выделяет строку/последовательность чисел, инициализирует ее случайными числами и возвращает ее. Любая помощь?Динамическое выделение массива int

+1

Удалите '*' 'сек до niz' и поставить' * '' перед funkcija'. 'niz' является указателем на' int', а '* niz' является' int', и он фактически совпадает с 'niz [0]'. Если вы напишите 'int funkcija (...', тогда вы вернете 'int', но вы хотите вернуть указатель на' int'. –

ответ

1

Есть несколько проблем с кодом, например, malloc() возвращает указатель, так что вы хотите присвоить указатель на переменную, которая является указатель. Другими словами, вы должны назначить возвращаемое значение malloc() на niz, а не *niz.

Далее, funkcija() должен вернуть указатель туда, где находится массив int s со случайными значениями. Тип возврата должен быть int *.

В продолжение вышеуказанной логики ваша функция должна вернуть указатель niz. Если вы разыскиваете niz*niz), вы возвращаете первый элемент массива (который равен , а не, что вам нужно).

-1
void funkcija(int broj) 
{ 

    char *niz; 
    int i; 

    niz = (char*)malloc(broj*sizeof(char)); 
    fillstring(niz, broj); 

    //Use string here 

    free(niz); 
} 

void fillstring(char *buffer, int len) 

{ 
    int i; 
    srand(time(NULL)); 

    for (i = 0; i < len; i++) 
    { 
     buff[i] = '0' + rand() % 10; 
    } 
} 
+0

Как имеет смысл поставить вызов srand внутри функции, называемой «fillstring»? Звучит как функция, которую вы можете вызвать более одного раза. – Lundin

+0

Лучше выделить память в том же месте, где вы будете ее бесплатно. Мне не нравится вызывать malloc() и возвращать указатель на выделенную память в вызывающая функция. – Beka

+0

Согласовано с этим (хотя в этом случае функция просто пропускает память), но вызов srand должен быть в какой-то функции init, так как его следует вызывать только один раз. – Lundin

0

Вы хотите:

int funkcija(int broj)  
{  
    int *niz; 
    int i; 

    niz = (int*)malloc(broj*sizeof(int)); 

    srand(time(NULL)); 

    for (i = 0; i < broj; i++) 
    { 
     niz[i] = rand() % 50; 
     printf("%d\n", niz[i]); 
    } 

    return niz;  
}