Como obter o tamanho do bloco de memória após o malloc?

Eu pensei que não poderia recuperar o comprimento de um bloco de memória alocado como o simples.length função em Java. No entanto, agora eu sei que quandomalloc() aloca o bloco, aloca bytes extras para armazenar um número inteiro que contém o tamanho de, o bloco. Este número inteiro está localizado no início do bloco; o endereço realmente retornado ao chamador aponta para o local logo após esse valor de comprimento. O problema é que não consigo acessar esse endereço para recuperar o comprimento do bloc

#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);
}

** Edit: eu finalmente fiz isso. O problema é que ele continua dando 0, pois o comprimento, em vez do tamanho, no meu sistema é porque meu Ubuntu é de 64 bits. Mudei str-4 para str-8 e funciona agora.

Se eu mudar o tamanho para 2000, ele produzirá 2017 como o comprimento. No entanto, quando mudo para 3000, ele fornece 3009. Estou usando o GCC.

questionAnswers(8)

yourAnswerToTheQuestion