Невозможно динамически выделить массив размером 10

Я пытаюсь динамически выделить массив размером 10. Но когда я печатаю элементы массива, я получаю значение 8 элементов. (Я работаю над редактором, предоставленным hackerrank.)

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
    char *s = malloc(1024*sizeof(char));
    scanf("%[^\n]", s);
    int* freq = (int*)calloc(10,sizeof(int));
    for(int i=0;i<sizeof(freq);i++)
        printf("%d ",freq[i]);
    }

Ожидаемый результат:

0 0 0 0 0 0 0 0 0 0

Результат, который я получаю:

0 0 0 0 0 0 0 0 

Почему я не получаю ожидаемого результата?


person U. Watt    schedule 15.03.2020    source источник
comment
sizeof(freq) - это размер указателя, а не то, на что он указывает. Вы знаете длину массива, вы только что передали 10 в calloc.   -  person Weather Vane    schedule 15.03.2020
comment
sizeof возвращает размер самого указателя в байтах, а не количество элементов массива, на которые он указывает. Невозможно получить размер динамически выделяемого массива.   -  person HolyBlackCat    schedule 15.03.2020


Ответы (1)


sizeof(freq) вернет размер int * в байтах на вашем компьютере, который равен 8. Просто используйте i < 10.

person Eraklon    schedule 15.03.2020