Не обязательно. Смотри мой ответ.

ал, что я не могу получить длину выделенного блока памяти, как простой.length функция в Java. Тем не менее, теперь я знаю, что когдаmalloc() выделяет блок, он выделяет дополнительные байты для хранения целого числа, содержащего размер блока. Это целое число находится в начале блока; адрес, фактически возвращаемый вызывающей стороне, указывает на местоположение сразу после этого значения длины. Проблема в том, что я не могу получить доступ к этому адресу, чтобы получить длину блока.

#include <stdlib.h>
#include <stdio.h>
int main(void)
{
        char *str;
        str = (char*) malloc(sizeof(char)*1000);
        int *length;
        length = str-4; /*because on 32 bit system, an int is 4 bytes long*/
        printf("Length of str:%d\n", *length);
        free(str);
}

** Редактировать: я наконец сделал это. Проблема в том, что в моей системе он продолжает давать 0 вместо длины, потому что моя Ubuntu 64-битная. Я изменил str-4 на str-8, и теперь он работает.

Если я изменю размер на 2000, он выдаст 2017 как длину. Однако, когда я изменяю на 3000, это дает 3009. Я использую GCC.

Ответы на вопрос(8)

Ваш ответ на вопрос