Сомневаюсь в malloc.C (Linux) - PullRequest
       34

Сомневаюсь в malloc.C (Linux)

3 голосов
/ 04 сентября 2010

В следующем коде, что означает buf = malloc(n * sizeof(char));

- это n * sizeof (char) необходимо, если да .. уточните.

int n;

char* buf;

fstat(fd, &fs);

n = fs.st_size;

buf = malloc(n * sizeof(char));

EDIT1 А что, если я напишу (n * sizeof (double))

Ответы [ 2 ]

6 голосов
/ 04 сентября 2010

Функция malloc выделяет байты и принимает в качестве входных данных количество байтов, которое вы хотите выделить. Оператор sizeof возвращает количество байтов для данного типа. В этом случае char равен 1 байту, но в случае int это, скорее всего, 4 байта, или double, скорее всего, 8 байтов. Выражение n * sizeof(char) преобразует число char в желаемое количество байтов.

В проиллюстрированном случае, используя char, вычисление количества байтов, вероятно, не требуется, , но это следует сделать, поскольку это помогает передать ваше намерение.

Что делает выражение, так это выделяет необходимый объем памяти, необходимый для хранения не более n числа char, и возвращает вам указатель buf на начало этой выделенной памяти.

1 голос
/ 04 сентября 2010

Стандарт ISO определяет byte как тот же размер, что и char.

Вам никогда не понадобится sizeof(char) для malloc

...