Enviado em 06/01/2023 - 06:23h
Bom dia a todos!// Crio um ponteiro, que não foi inicializado. // Logo ele aponta para um lugar aleatório da memória // E não tenho controle sobre que lugar de memória ele está apontando. char *p; // Seria então melhor sempre que eu declarar um ponteiro, eu inicializá-lo? //Apontando para um ponteiro nulo? Ou seja, não apontar para lugar algum? char *p = NULL;
Enviado em 12/01/2023 - 03:20h
Ao contrário do que esse bot horroroso disse, nem sempre um ponteiro (ou qualquer outra variável) vai ter valor indefinido: variáveis com alocação estática (globais e aquelas declaradas com o modificador static) que não seja explicitamente inicializadas com um valor são preenchidas com um valor inicial nulo. Somente variáveis automáticas (variáveis locais que não são declaradas com o especificador static) têm valores iniciais indefinidos.void *my_alloc(char type, size_t n){ void *result=NULL; switch(type){ case 'c': result=malloc(n); break; case 'i': result=malloc(n*sizeof(int)); break; case 'l': result=malloc(n*sizeof(long int)); break; case 'q': result=malloc(n*sizeof(long long int)); break; case 's': result=malloc(n*sizeof(short int)); break; case 'f': result=malloc(n*sizeof(float)); break; case 'd': result=malloc(n*sizeof(double)); break; case 'D': result=malloc(n*sizeof(long double)); break; case 'p': result=malloc(n*sizeof(void *)); break; default: errno=EINVAL; } return result; }
void *my_alloc(char type, size_t n){ void *result; switch(type){ case 'c': result=malloc(n); break; case 'i': result=malloc(n*sizeof(int)); break; case 'l': result=malloc(n*sizeof(long int)); break; case 'q': result=malloc(n*sizeof(long long int)); break; case 's': result=malloc(n*sizeof(short int)); break; case 'f': result=malloc(n*sizeof(float)); break; case 'd': result=malloc(n*sizeof(double)); break; case 'D': result=malloc(n*sizeof(long double)); break; case 'p': result=malloc(n*sizeof(void *)); break; default: result=NULL; errno=EINVAL; } return result; }
void *my_alloc(char type, size_t n){ void *result; if(type=='c') result=malloc(n); else if(type=='i') result=malloc(n*sizeof(int)); else if(type=='l') result=malloc(n*sizeof(long int)); else if(type=='q') result=malloc(n*sizeof(long long int)); else if(type=='s') result=malloc(n*sizeof(short int)); else if(type=='f') result=malloc(n*sizeof(float)); else if(type=='d') result=malloc(n*sizeof(double)); else if(type=='D') result=malloc(n*sizeof(long double)); else if(type=='p') result=malloc(n*sizeof(void *)); else{ errno=EINVAL; result=NULL; } return result; }
void *my_alloc(char type, size_t n){ return type=='c'? malloc(n): type=='i'? malloc(n*sizeof(int)): type=='l'? malloc(n*sizeof(long int)): type=='q'? malloc(n*sizeof(long long int)): type=='s'? malloc(n*sizeof(short int)): type=='f'? malloc(n*sizeof(float)): type=='d'? malloc(n*sizeof(double)): type=='D'? malloc(n*sizeof(long double)): type=='p'? malloc(n*sizeof(void *)): (errno=EINVAL), NULL ; }
Enviado em 06/01/2023 - 06:23h
Sim, está correto! Por padrão, quando você cria um ponteiro, ele aponta para um endereço de memória aleatório, o que pode causar falhas e erros desnecessários. Para evitar isso, é sempre recomendado inicializar os ponteiros direcionando-os para um endereço de memória nulo (NULL), não apontando para nenhum lugar específico. Dessa forma, evita-se inconsistências no programa.Enviado em 12/01/2023 - 03:35h
De passagem, se eu fosse fazer a função acima, eu verificaria outras possibilidades de erro e evitaria múltiplas chamadas à mesma função.int my_alloc(char type, size_t n){ if(n==0){ errno=EINVAL; return NULL; } switch(type){ default: errno=EINVAL; return NULL; case 'c': break; case 'i': n*=sizeof(int); break; case 'l': n*=sizeof(long int); break; case 'q': n*=sizeof(long long int); break; case 's': n*=sizeof(short int); break; case 'f': n*=sizeof(float); break; case 'd': n*=sizeof(double); break; case 'D': n*=sizeof(long double); break; case 'p': n*=sizeof(void *); } return malloc(n); }
Criar entrada (menuentry) ISO no Grub
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar o VIM 9.1 no Debian 12
Como saber o range de um IP público?
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Slackpkg+ (Slackpkg Plus) está de volta!
Como dividir duas janelas igualmente e lado-a-lado na sua tela
Posso instalar usar o grub sem ter linux instalado, para iniciar o win... (2)
Ocomon 6.0.1 - Problemas ao editar configurações estendidas (6)
Problemas com adaptadores wifi no Zorin (0)