Isso foi uma dúvida de um colega meu sobre alocação de memória em C/C++:
Vamos ver a seguinte instrução:
#include <stdio.h>
#include <malloc.h>
int main(int num_args, char** args) {
//Aloco na memória, um inteiro
int* inteiro = (int*)(malloc(sizeof(int)));
//Veja qual endereço de memória, ele alocou (Ex.: 4074488)
printf("%d\n", inteiro);
//Adiciona mais um no endereço, teoricamente vai para 4074489
inteiro++;
//Exibo o endereço (4074492 (???))
printf("%d\n", inteiro);
//Libero memória
free(inteiro);
//Espero um <enter> :P
getchar();
//Finalizo a função
return 0;
}
A dúvida: Por que diabos quando eu somo um em ponteiro, ele vai para um outro número nada a ver?
Não é bem assim...
Quando eu somo +1, ele vai para o próximo endereço que é alocavel para um inteiro, ou seja, se o tamanho do inteiro é 4 bytes (em gcc, eu acho que é...), então se tenho o endereço 4074488, se eu somar +1, ele vai para 4074492, 4 bytes a mais, por causa que o que ele tem que alocar é um inteiro.
Se eu utilizar um char em vez de inteiro no código:
#include <stdio.h>
#include <malloc.h>
int main(int num_args, char** args) {
char* b = (char*)(malloc(sizeof(char)));
printf("%d\n", b);
b++;
printf("%d\n", b);
free(b);
getchar();
return 0;
}
Agora vai "aparecer corretamente", pois o char em gcc é um byte (eu acho...), então se tenho 4074488 se somo +1 no endereço, ele vai para 4074489 :)
Até mais!
Um comentário:
Muito bom Take! Continue postando mais coisas sobre C/C++ :)
Sem querer pedir muito, você poderia, quando tiver tempo, dar uma olhada no OGRE (http://www.ogre3d.org/) e fazer uma anális? :)
Postar um comentário