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.