·
Ciência da Computação ·
Estrutura de Dados
Envie sua pergunta para a IA e receba a resposta na hora

Prefere sua atividade resolvida por um tutor especialista?
- Receba resolvida até o seu prazo
- Converse com o tutor pelo chat
- Garantia de 7 dias contra erros
Recomendado para você
41
Eficiência e Complexidade Computacional: Conceitos e Exemplos
Estrutura de Dados
UFS
40
Implementação do Algoritmo de Fatorial: Abordagens Iterativa e Recursiva
Estrutura de Dados
UFS
1
Atividades de Estruturas de Dados: AVL, Heaps e Conjuntos Disjuntos
Estrutura de Dados
UFS
47
Lista Encadeada: Estrutura, Operações e Implementação em C
Estrutura de Dados
UFS
4
Atividade Lab1b: Implementação do TAD Fila Estática
Estrutura de Dados
MACKENZIE
4
Apresentação sobre Bancos de Dados NoSQL
Estrutura de Dados
UVA
Texto de pré-visualização
Introdução Inteiros com sinal em C Dados com 8 16 32 ou 64 bits Tipo Bits Alcance Formato char 8 27 27 1 c hhi short 16 215 215 1 hi int 16 64 263 263 1 i d long 32 64 263 263 1 li long long 64 263 263 1 lli Valores dependentes da plataforma C 2022 Bruno Prado Departamento de Computação UFS 2 59 Introdução Inteiros sem sinal em C Dados com 8 16 32 ou 64 bits Tipo Bits Alcance Formato unsigned char 8 0 28 1 c hhu unsigned short 16 0 216 1 hu unsigned int 16 64 0 264 1 u unsigned long 32 64 0 264 1 lu unsigned long long 64 0 264 1 llu Valores dependentes da plataforma C 2022 Bruno Prado Departamento de Computação UFS 3 59 Introdução Ponto flutuante em C Dados com 32 64 80 96 ou 128 bits Tipo Bits Alcance Formato float 32 12E38 34E38 f double 64 23E308 17E308 lf long double 80 128 34E4932 11E4932 Lf Valores dependentes da plataforma C 2022 Bruno Prado Departamento de Computação UFS 4 59 Introdução Organização dos bytes na memória Little Endian Primeiro byte é o menos significativo 0xAABBCCDD 0 1 2 3 0xDD 0xCC 0xBB 0xAA Big Endian Primeiro byte é o mais significativo 0xAABBCCDD 0 1 2 3 0xAA 0xBB 0xCC 0xDD C 2022 Bruno Prado Departamento de Computação UFS 5 59 Introdução Organização dos bytes na memória Little Endian Primeiro byte é o menos significativo 0xAABBCCDD 0 1 2 3 0xDD 0xCC 0xBB 0xAA Big Endian Primeiro byte é o mais significativo 0xAABBCCDD 0 1 2 3 0xAA 0xBB 0xCC 0xDD C 2022 Bruno Prado Departamento de Computação UFS 6 59 Introdução Segmentos de memória Pilha stack Alocação dinâmica heap Dados não inicializados bss Dados inicializados data Código text Endereço superior Endereço inferior C 2022 Bruno Prado Departamento de Computação UFS 7 59 Introdução Segmentos de memória Pilha Passagem de parâmetros Controle de fluxo de execução Alocação de variáveis locais Gerenciado pelo compilador Heap Dados alocados dinamicamente Controlado pelo programador Dados Variáveis estáticas declaradas pelo programador com valores inicializados ou definidos pela plataforma Código Contém as operações aritméticas e lógicas controles condicionais e iterativos chamadas de funções etc C 2022 Bruno Prado Departamento de Computação UFS 8 59 Introdução Segmentos de memória Pilha Passagem de parâmetros Controle de fluxo de execução Alocação de variáveis locais Gerenciado pelo compilador Heap Dados alocados dinamicamente Controlado pelo programador Dados Variáveis estáticas declaradas pelo programador com valores inicializados ou definidos pela plataforma Código Contém as operações aritméticas e lógicas controles condicionais e iterativos chamadas de funções etc C 2022 Bruno Prado Departamento de Computação UFS 9 59 Introdução Segmentos de memória Pilha Passagem de parâmetros Controle de fluxo de execução Alocação de variáveis locais Gerenciado pelo compilador Heap Dados alocados dinamicamente Controlado pelo programador Dados Variáveis estáticas declaradas pelo programador com valores inicializados ou definidos pela plataforma Código Contém as operações aritméticas e lógicas controles condicionais e iterativos chamadas de funções etc C 2022 Bruno Prado Departamento de Computação UFS 10 59 Introdução Segmentos de memória Pilha Passagem de parâmetros Controle de fluxo de execução Alocação de variáveis locais Gerenciado pelo compilador Heap Dados alocados dinamicamente Controlado pelo programador Dados Variáveis estáticas declaradas pelo programador com valores inicializados ou definidos pela plataforma Código Contém as operações aritméticas e lógicas controles condicionais e iterativos chamadas de funções etc C 2022 Bruno Prado Departamento de Computação UFS 11 59 Introdução Erros na utilização da memória Falha de segmentação segmentation fault Acesso indevido na memória Ex referência para endereço inválido ou nulo Estouro de pilha stack overflow A pilha sobrescreveu dados do heap Ex função recursiva em laço infinito C 2022 Bruno Prado Departamento de Computação UFS 12 59 Introdução Erros na utilização da memória Falha de segmentação segmentation fault Acesso indevido na memória Ex referência para endereço inválido ou nulo Estouro de pilha stack overflow A pilha sobrescreveu dados do heap Ex função recursiva em laço infinito C 2022 Bruno Prado Departamento de Computação UFS 13 59 Ponteiros O que são apontadores ou ponteiros São um tipo de dado utilizado para referenciar o conteúdo de uma determinada região de memória Armazenam o endereço de memória ao invés do valor da variável 1 Padrão de tipos por tamanho 2 include stdinth 3 Função principal 4 int main 5 Inteiro sem sinal x inicializado com 7 6 uint32t x 7 7 Ponteiro px inicializado como nulo 8 uint32t px NULL 9 Ponteiro px recebe endereço da variável x 10 px x 11 Retornando zero 12 return 0 13 C 2022 Bruno Prado Departamento de Computação UFS 14 59 Ponteiros O que são apontadores ou ponteiros São um tipo de dado utilizado para referenciar o conteúdo de uma determinada região de memória Armazenam o endereço de memória ao invés do valor da variável 1 Padrão de tipos por tamanho 2 include stdinth 3 Função principal 4 int main 5 Inteiro sem sinal x inicializado com 7 6 uint32t x 7 7 Ponteiro px inicializado como nulo 8 uint32t px NULL 9 Ponteiro px recebe endereço da variável x 10 px x 11 Retornando zero 12 return 0 13 C 2022 Bruno Prado Departamento de Computação UFS 15 59 Ponteiros O que são apontadores ou ponteiros São um tipo de dado utilizado para referenciar o conteúdo de uma determinada região de memória Armazenam o endereço de memória ao invés do valor da variável 1 Padrão de tipos por tamanho 2 include stdinth 3 Função principal 4 int main 5 Inteiro sem sinal x inicializado com 7 6 uint32t x 7 7 Ponteiro px inicializado como nulo 8 uint32t px NULL 9 Ponteiro px recebe endereço da variável x 10 px x 11 Retornando zero 12 return 0 13 C 2022 Bruno Prado Departamento de Computação UFS 16 59 Ponteiros Conteúdo da memória Endereço Memória Variável 0x80000004 0x80000000 px 0x80000000 0x00000007 x C 2022 Bruno Prado Departamento de Computação UFS 17 59 Ponteiros Referenciando o ponteiro Operador 1 Padrão de tipos por tamanho 2 include stdinth 3 Biblioteca de ES 4 include stdioh 5 Função principal 6 int main 7 8 Ponteiro px recebe endereço da variável x 9 px x 10 Imprimindo informações 11 printfmainxup px px 12 Atualizando valor de x 13 px 3 14 Retornando zero 15 return 0 16 main x 7 0x80000000 C 2022 Bruno Prado Departamento de Computação UFS 18 59 Ponteiros Conteúdo da memória Endereço Memória Variável 0x80000004 0x80000000 px 0x80000000 0x00000003 x C 2022 Bruno Prado Departamento de Computação UFS 19 59 Ponteiros Passagem de parâmetro por valor 1 Padrão de tipos por tamanho 2 include stdinth 3 Biblioteca de ES 4 include stdioh 5 Função f 6 void fuint32t x 7 Imprimindo o parâmetro x 8 printffxu x 9 Modificando o parâmetro x 10 x 1 11 Imprimindo o parâmetro x 12 printffxu x 13 14 Função principal 15 int main 16 17 C 2022 Bruno Prado Departamento de Computação UFS 20 59 Ponteiros Passagem de parâmetro por valor 1 Padrão de tipos por tamanho 2 include stdinth 3 Biblioteca de ES 4 include stdioh 5 Função f 6 void fuint32t x 7 Imprimindo o parâmetro x 8 printffxu x 9 Modificando o parâmetro x 10 x 1 11 Imprimindo o parâmetro x 12 printffxu x 13 14 Função principal 15 int main 16 17 C 2022 Bruno Prado Departamento de Computação UFS 21 59 Ponteiros Passagem de parâmetro por valor 1 Padrão de tipos por tamanho 2 include stdinth 3 4 Função principal 5 int main 6 Inteiro sem sinal x inicializado com 11 7 uint32t x 11 8 Chamando a função f com parâmetro x 9 fx 10 Imprimindo valor de x 11 printfmainxu x 12 Retornando zero 13 return 0 14 f x 11 f x 1 main x 11 C 2022 Bruno Prado Departamento de Computação UFS 22 59 Ponteiros Conteúdo da memória Endereço Memória Variável 0x80000004 0x80000000 px 0x80000000 0x0000000B x C 2022 Bruno Prado Departamento de Computação UFS 23 59 Ponteiros Passagem de parâmetro por referência 1 Padrão de tipos por tamanho 2 include stdinth 3 Biblioteca de ES 4 include stdioh 5 Função f 6 void fuint32t x 7 Imprimindo o conteúdo de x 8 printffxu x 9 Incrementando o conteúdo de x 10 x 11 Imprimindo o parâmetro x 12 printffxu x 13 14 Função principal 15 int main 16 17 C 2022 Bruno Prado Departamento de Computação UFS 24 59 Ponteiros Passagem de parâmetro por referência 1 Padrão de tipos por tamanho 2 include stdinth 3 Biblioteca de ES 4 include stdioh 5 Função f 6 void fuint32t x 7 Imprimindo o conteúdo de x 8 printffxu x 9 Incrementando o conteúdo de x 10 x 11 Imprimindo o parâmetro x 12 printffxu x 13 14 Função principal 15 int main 16 17 C 2022 Bruno Prado Departamento de Computação UFS 25 59 Ponteiros Passagem de parâmetro por referência 1 Padrão de tipos por tamanho 2 include stdinth 3 4 Função principal 5 int main 6 Inteiro sem sinal x inicializado com 7 7 uint32t x 11 8 Chamando a função f com ponteiro de x 9 fx 10 Imprimindo valor de x 11 printfmainxu x 12 Retornando zero 13 return 0 14 f x 11 f x 12 main x 12 C 2022 Bruno Prado Departamento de Computação UFS 26 59 Ponteiros Conteúdo da memória Endereço Memória Variável 0x80000004 0x80000000 px 0x80000000 0x0000000C x C 2022 Bruno Prado Departamento de Computação UFS 27 59 Ponteiros Modificador const Proteger passagem por referência Permissão de somente leitura 1 Padrão de tipos por tamanho 2 include stdinth 3 4 Função f 5 void fconst uint32t x 6 Exibindo o conteúdo de x 7 printffxu x 8 Modificando o conteúdo de x 9 x 1 10 11 C 2022 Bruno Prado Departamento de Computação UFS 28 59 Ponteiros Modificador const Proteger passagem por referência Permissão de somente leitura 1 Padrão de tipos por tamanho 2 include stdinth 3 4 Função f 5 void fconst uint32t x 6 Exibindo o conteúdo de x 7 printffxu x 8 Modificando o conteúdo de x 9 x 1 10 11 maincpp910 error assignment of readonly location x C 2022 Bruno Prado Departamento de Computação UFS 29 59 Ponteiros Ponteiro de ponteiro 1 Biblioteca de ES 2 include stdioh 3 Função principal 4 int mainint argc char argv 5 args argv 6 char args argv 7 pargs args argv 8 char pargs args 9 Imprimindo parâmetros da main 10 printfmain is argc args 0 11 printfmain is argc pargs0 12 Retornando zero 13 return 0 14 main1 mainbin C 2022 Bruno Prado Departamento de Computação UFS 30 59 Ponteiros Ponteiro de ponteiro 1 Biblioteca de ES 2 include stdioh 3 Função principal 4 int mainint argc char argv 5 args argv 6 char args argv 7 pargs args argv 8 char pargs args 9 Imprimindo parâmetros da main 10 printfmain is argc args 0 11 printfmain is argc pargs0 12 Retornando zero 13 return 0 14 main1 mainbin main1 mainbin C 2022 Bruno Prado Departamento de Computação UFS 31 59 Ponteiros Conteúdo da memória Endereço Memória Variável 0xF0000004 mainbin argv 0xF0000000 0x00000001 argc 0x80000000 0xF0000004 args 0x80000004 0x80000000 pargs C 2022 Bruno Prado Departamento de Computação UFS 32 59 Ponteiros Ponteiro de função 1 Padrão de tipos por tamanho 2 include stdinth 3 Biblioteca de ES 4 include stdioh 5 Função fatorial 6 uint64t fatorialuint32t n 7 Resultado 8 uint64t r 1 9 Iterações de 2 n 10 foruint32t i 2 i n i 11 Multiplicação do resultado por i 12 r r i 13 Retorno do resultado 14 return r 15 16 Função principal 17 int main 18 19 C 2022 Bruno Prado Departamento de Computação UFS 33 59 Ponteiros Ponteiro de função 1 Padrão de tipos por tamanho 2 include stdinth 3 Biblioteca de ES 4 include stdioh 5 6 Função principal 7 int main 8 Ponteiro de função 9 uint64t pfuint32t NULL 10 Atribuição de endereço da função fatorial 11 pf fatorial 12 Imprimindo fatorial de 5 13 printffatorial 5lu pf5 14 Retornando zero 15 return 0 16 fatorial5 120 C 2022 Bruno Prado Departamento de Computação UFS 34 59 Alocação dinâmica Alocação dinâmica x estática Variáveis de tamanho conhecido em tempo de execução Alocada dinamicamente no segmento heap Gerenciado pelo programador Limitado pela memória disponível Variáveis de tamanho fixo previamente conhecido Alocada estaticamente nos segmentos data e bss Controlado pelo compilador Limitado pelo compilador e SO C 2022 Bruno Prado Departamento de Computação UFS 35 59 Alocação dinâmica Medindo o tamanho em bytes das variáveis Operador sizeof 1 Padrão de tipos por tamanho 2 include stdinth 3 Biblioteca de ES 4 include stdioh 5 Estrutura exemplo 6 typedef struct exemplo 7 Nome 8 const char nome 9 Idade 10 uint8t idade 11 exemplo 12 Função principal 13 int main 14 15 C 2022 Bruno Prado Departamento de Computação UFS 36 59 Alocação dinâmica Medindo o tamanho em bytes das variáveis Operador sizeof 1 2 Função principal 3 int main 4 Instanciando exemplo 5 exemplo a EstruturasdeDados 20 6 Imprimindo tamanho de tipos 7 printfsizeofalu sizeofa 8 printfsizeofanomelu sizeofanome 9 printfsizeofaidadelu sizeofaidade 10 Retornando zero 11 return 0 12 sizeofa 16 C 2022 Bruno Prado Departamento de Computação UFS 37 59 Alocação dinâmica Medindo o tamanho em bytes das variáveis Operador sizeof 1 2 Função principal 3 int main 4 Instanciando exemplo 5 exemplo a EstruturasdeDados 20 6 Imprimindo tamanho de tipos 7 printfsizeofalu sizeofa 8 printfsizeofanomelu sizeofanome 9 printfsizeofaidadelu sizeofaidade 10 Retornando zero 11 return 0 12 sizeofa 16 sizeofanome 8 C 2022 Bruno Prado Departamento de Computação UFS 38 59 Alocação dinâmica Medindo o tamanho em bytes das variáveis Operador sizeof 1 2 Função principal 3 int main 4 Instanciando exemplo 5 exemplo a EstruturasdeDados 20 6 Imprimindo tamanho de tipos 7 printfsizeofalu sizeofa 8 printfsizeofanomelu sizeofanome 9 printfsizeofaidadelu sizeofaidade 10 Retornando zero 11 return 0 12 sizeofa 16 sizeofanome 8 sizeofaidade 1 C 2022 Bruno Prado Departamento de Computação UFS 39 59 Alocação dinâmica Alocando memória dinamicamente Função void mallocsizet size 1 2 Função principal 3 int main 4 Ponteiro de inteiros de 32 bits sem sinal 5 uint32t vetor NULL 6 Alocando vetor com 100 elementos 7 vetor uint32t malloc 100 sizeofuint32t 8 Checagem de alocação 9 ifvetor NULL printfFalhanaalocação 10 else printfSucessonaalocação 11 Retornando zero 12 return 0 13 C 2022 Bruno Prado Departamento de Computação UFS 40 59 Alocação dinâmica Alocando memória dinamicamente Função void mallocsizet size 1 2 Função principal 3 int main 4 Ponteiro de inteiros de 32 bits sem sinal 5 uint32t vetor NULL 6 Alocando vetor com 100 elementos 7 vetor uint32t malloc 100 sizeofuint32t 8 Checagem de alocação 9 ifvetor NULL printfFalhanaalocação 10 else printfSucessonaalocação 11 Retornando zero 12 return 0 13 Falha na alocação C 2022 Bruno Prado Departamento de Computação UFS 41 59 Alocação dinâmica Alocando memória dinamicamente Função void mallocsizet size 1 2 Função principal 3 int main 4 Ponteiro de inteiros de 32 bits sem sinal 5 uint32t vetor NULL 6 Alocando vetor com 100 elementos 7 vetor uint32t malloc 100 sizeofuint32t 8 Checagem de alocação 9 ifvetor NULL printfFalhanaalocação 10 else printfSucessonaalocação 11 Retornando zero 12 return 0 13 Sucesso na alocação C 2022 Bruno Prado Departamento de Computação UFS 42 59 Alocação dinâmica Alocando memória dinamicamente Função void mallocsizet size Endereço base de 0x80000000 Tamanho alocado de 100 4 bytes 0 1 98 99 0x80000000 0x80000004 0x80000188 0x8000018C Ponteiro C 2022 Bruno Prado Departamento de Computação UFS 43 59 Alocação dinâmica Alocando e inicializando memória dinamicamente Função void callocsizet num sizet size 1 2 Função principal 3 int main 4 Ponteiro de inteiros de 32 bits sem sinal 5 uint32t vetor NULL 6 Alocando vetor com 100 elementos 7 vetor uint32t calloc 100 sizeofuint32t 8 Checagem de alocação 9 ifvetor NULL printfFalhanaalocação 10 else printfSucessonaalocação 11 Retornando zero 12 return 0 13 C 2022 Bruno Prado Departamento de Computação UFS 44 59 Alocação dinâmica Alocando e inicializando memória dinamicamente Função void callocsizet num sizet size 1 2 Função principal 3 int main 4 Ponteiro de inteiros de 32 bits sem sinal 5 uint32t vetor NULL 6 Alocando vetor com 100 elementos 7 vetor uint32t calloc 100 sizeofuint32t 8 Checagem de alocação 9 ifvetor NULL printfFalhanaalocação 10 else printfSucessonaalocação 11 Retornando zero 12 return 0 13 Falha na alocação C 2022 Bruno Prado Departamento de Computação UFS 45 59 Alocação dinâmica Alocando e inicializando memória dinamicamente Função void callocsizet num sizet size 1 2 Função principal 3 int main 4 Ponteiro de inteiros de 32 bits sem sinal 5 uint32t vetor NULL 6 Alocando vetor com 100 elementos 7 vetor uint32t calloc 100 sizeofuint32t 8 Checagem de alocação 9 ifvetor NULL printfFalhanaalocação 10 else printfSucessonaalocação 11 Retornando zero 12 return 0 13 Sucesso na alocação C 2022 Bruno Prado Departamento de Computação UFS 46 59 Alocação dinâmica Alocando e inicializando memória dinamicamente Função void callocsizet num sizet size Endereço base de 0x80000000 Tamanho alocado de 100 4 bytes 0 0 0 0 0 1 98 99 0x80000000 0x80000004 0x80000188 0x8000018C Ponteiro C 2022 Bruno Prado Departamento de Computação UFS 47 59 Alocação dinâmica Realocando memória dinamicamente Função void reallocvoid ptr sizet size 1 2 Ponteiro de realocação 3 uint32t r NULL 4 Realocando vetor com 1000 elementos 5 r uint32t reallocvetor 1000 sizeofuint32t 6 Checagem de alocação 7 ifr NULL printfFalhanarealocação 8 else 9 printfSucessonarealocação 10 Atualizando ponteiro 11 vetor r 12 13 Retornando zero 14 return 0 15 C 2022 Bruno Prado Departamento de Computação UFS 48 59 Alocação dinâmica Realocando memória dinamicamente Função void reallocvoid ptr sizet size 1 2 Ponteiro de realocação 3 uint32t r NULL 4 Realocando vetor com 1000 elementos 5 r uint32t reallocvetor 1000 sizeofuint32t 6 Checagem de alocação 7 ifr NULL printfFalhanarealocação 8 else 9 printfSucessonarealocação 10 Atualizando ponteiro 11 vetor r 12 13 Retornando zero 14 return 0 15 Falha na realocação C 2022 Bruno Prado Departamento de Computação UFS 49 59 Alocação dinâmica Realocando memória dinamicamente Função void reallocvoid ptr sizet size 1 2 Ponteiro de realocação 3 uint32t r NULL 4 Realocando vetor com 1000 elementos 5 r uint32t reallocvetor 1000 sizeofuint32t 6 Checagem de alocação 7 ifr NULL printfFalhanarealocação 8 else 9 printfSucessonarealocação 10 Atualizando ponteiro 11 vetor r 12 13 Retornando zero 14 return 0 15 Sucesso na realocação C 2022 Bruno Prado Departamento de Computação UFS 50 59 Alocação dinâmica Realocando memória dinamicamente Função void reallocvoid ptr sizet size 1 2 Ponteiro de realocação 3 uint32t r NULL 4 Realocando vetor com 1000 elementos 5 r uint32t reallocvetor 1000 sizeofuint32t 6 Checagem de alocação 7 ifr NULL printfFalhanarealocação 8 else 9 printfSucessonarealocação 10 Atualizando ponteiro 11 vetor r 12 13 Retornando zero 14 return 0 15 Sucesso na realocação C 2022 Bruno Prado Departamento de Computação UFS 51 59 Alocação dinâmica Realocando memória dinamicamente Função void reallocvoid ptr sizet size Endereço base de 0x80000000 Tamanho alocado de 100 4 bytes 1 2 99 100 0 1 98 99 0x80000000 0x80000004 0x80000188 0x8000018C Ponteiro C 2022 Bruno Prado Departamento de Computação UFS 52 59 Alocação dinâmica Realocando memória dinamicamente Função void reallocvoid ptr sizet size Endereço base 0x80008000 Tamanho realocado de 1000 4 bytes 1 100 0 99 998 999 0x80008000 0x8000818C 0x80008F98 0x80008F9C Ponteiro C 2022 Bruno Prado Departamento de Computação UFS 53 59 Alocação dinâmica Liberando memória alocada Função void freevoid ptr 1 2 Biblioteca padrão 3 include stdlibh 4 5 Função principal 6 int main 7 8 Liberando memória alocada 9 freevetor 10 Invalidando ponteiro 11 vetor NULL 12 Retornando zero 13 return 0 14 C 2022 Bruno Prado Departamento de Computação UFS 54 59 Alocação dinâmica Liberando memória alocada Função void freevoid ptr 1 2 Biblioteca padrão 3 include stdlibh 4 5 Função principal 6 int main 7 8 Liberando memória alocada 9 freevetor 10 Invalidando ponteiro 11 vetor NULL 12 Retornando zero 13 return 0 14 C 2022 Bruno Prado Departamento de Computação UFS 55 59 Alocação dinâmica Erros comuns de programação Ponteiros não inicializados ou não invalidados Segmentation Fault Região de memória sem nenhum ponteiro Memory Leak Falta de controle nos limites de memória Buffer Overflow C 2022 Bruno Prado Departamento de Computação UFS 56 59 Alocação dinâmica Erros comuns de programação Ponteiros não inicializados ou não invalidados Segmentation Fault Região de memória sem nenhum ponteiro Memory Leak Falta de controle nos limites de memória Buffer Overflow C 2022 Bruno Prado Departamento de Computação UFS 57 59 Alocação dinâmica Erros comuns de programação Ponteiros não inicializados ou não invalidados Segmentation Fault Região de memória sem nenhum ponteiro Memory Leak Falta de controle nos limites de memória Buffer Overflow C 2022 Bruno Prado Departamento de Computação UFS 58 59
Envie sua pergunta para a IA e receba a resposta na hora
Recomendado para você
41
Eficiência e Complexidade Computacional: Conceitos e Exemplos
Estrutura de Dados
UFS
40
Implementação do Algoritmo de Fatorial: Abordagens Iterativa e Recursiva
Estrutura de Dados
UFS
1
Atividades de Estruturas de Dados: AVL, Heaps e Conjuntos Disjuntos
Estrutura de Dados
UFS
47
Lista Encadeada: Estrutura, Operações e Implementação em C
Estrutura de Dados
UFS
4
Atividade Lab1b: Implementação do TAD Fila Estática
Estrutura de Dados
MACKENZIE
4
Apresentação sobre Bancos de Dados NoSQL
Estrutura de Dados
UVA
Texto de pré-visualização
Introdução Inteiros com sinal em C Dados com 8 16 32 ou 64 bits Tipo Bits Alcance Formato char 8 27 27 1 c hhi short 16 215 215 1 hi int 16 64 263 263 1 i d long 32 64 263 263 1 li long long 64 263 263 1 lli Valores dependentes da plataforma C 2022 Bruno Prado Departamento de Computação UFS 2 59 Introdução Inteiros sem sinal em C Dados com 8 16 32 ou 64 bits Tipo Bits Alcance Formato unsigned char 8 0 28 1 c hhu unsigned short 16 0 216 1 hu unsigned int 16 64 0 264 1 u unsigned long 32 64 0 264 1 lu unsigned long long 64 0 264 1 llu Valores dependentes da plataforma C 2022 Bruno Prado Departamento de Computação UFS 3 59 Introdução Ponto flutuante em C Dados com 32 64 80 96 ou 128 bits Tipo Bits Alcance Formato float 32 12E38 34E38 f double 64 23E308 17E308 lf long double 80 128 34E4932 11E4932 Lf Valores dependentes da plataforma C 2022 Bruno Prado Departamento de Computação UFS 4 59 Introdução Organização dos bytes na memória Little Endian Primeiro byte é o menos significativo 0xAABBCCDD 0 1 2 3 0xDD 0xCC 0xBB 0xAA Big Endian Primeiro byte é o mais significativo 0xAABBCCDD 0 1 2 3 0xAA 0xBB 0xCC 0xDD C 2022 Bruno Prado Departamento de Computação UFS 5 59 Introdução Organização dos bytes na memória Little Endian Primeiro byte é o menos significativo 0xAABBCCDD 0 1 2 3 0xDD 0xCC 0xBB 0xAA Big Endian Primeiro byte é o mais significativo 0xAABBCCDD 0 1 2 3 0xAA 0xBB 0xCC 0xDD C 2022 Bruno Prado Departamento de Computação UFS 6 59 Introdução Segmentos de memória Pilha stack Alocação dinâmica heap Dados não inicializados bss Dados inicializados data Código text Endereço superior Endereço inferior C 2022 Bruno Prado Departamento de Computação UFS 7 59 Introdução Segmentos de memória Pilha Passagem de parâmetros Controle de fluxo de execução Alocação de variáveis locais Gerenciado pelo compilador Heap Dados alocados dinamicamente Controlado pelo programador Dados Variáveis estáticas declaradas pelo programador com valores inicializados ou definidos pela plataforma Código Contém as operações aritméticas e lógicas controles condicionais e iterativos chamadas de funções etc C 2022 Bruno Prado Departamento de Computação UFS 8 59 Introdução Segmentos de memória Pilha Passagem de parâmetros Controle de fluxo de execução Alocação de variáveis locais Gerenciado pelo compilador Heap Dados alocados dinamicamente Controlado pelo programador Dados Variáveis estáticas declaradas pelo programador com valores inicializados ou definidos pela plataforma Código Contém as operações aritméticas e lógicas controles condicionais e iterativos chamadas de funções etc C 2022 Bruno Prado Departamento de Computação UFS 9 59 Introdução Segmentos de memória Pilha Passagem de parâmetros Controle de fluxo de execução Alocação de variáveis locais Gerenciado pelo compilador Heap Dados alocados dinamicamente Controlado pelo programador Dados Variáveis estáticas declaradas pelo programador com valores inicializados ou definidos pela plataforma Código Contém as operações aritméticas e lógicas controles condicionais e iterativos chamadas de funções etc C 2022 Bruno Prado Departamento de Computação UFS 10 59 Introdução Segmentos de memória Pilha Passagem de parâmetros Controle de fluxo de execução Alocação de variáveis locais Gerenciado pelo compilador Heap Dados alocados dinamicamente Controlado pelo programador Dados Variáveis estáticas declaradas pelo programador com valores inicializados ou definidos pela plataforma Código Contém as operações aritméticas e lógicas controles condicionais e iterativos chamadas de funções etc C 2022 Bruno Prado Departamento de Computação UFS 11 59 Introdução Erros na utilização da memória Falha de segmentação segmentation fault Acesso indevido na memória Ex referência para endereço inválido ou nulo Estouro de pilha stack overflow A pilha sobrescreveu dados do heap Ex função recursiva em laço infinito C 2022 Bruno Prado Departamento de Computação UFS 12 59 Introdução Erros na utilização da memória Falha de segmentação segmentation fault Acesso indevido na memória Ex referência para endereço inválido ou nulo Estouro de pilha stack overflow A pilha sobrescreveu dados do heap Ex função recursiva em laço infinito C 2022 Bruno Prado Departamento de Computação UFS 13 59 Ponteiros O que são apontadores ou ponteiros São um tipo de dado utilizado para referenciar o conteúdo de uma determinada região de memória Armazenam o endereço de memória ao invés do valor da variável 1 Padrão de tipos por tamanho 2 include stdinth 3 Função principal 4 int main 5 Inteiro sem sinal x inicializado com 7 6 uint32t x 7 7 Ponteiro px inicializado como nulo 8 uint32t px NULL 9 Ponteiro px recebe endereço da variável x 10 px x 11 Retornando zero 12 return 0 13 C 2022 Bruno Prado Departamento de Computação UFS 14 59 Ponteiros O que são apontadores ou ponteiros São um tipo de dado utilizado para referenciar o conteúdo de uma determinada região de memória Armazenam o endereço de memória ao invés do valor da variável 1 Padrão de tipos por tamanho 2 include stdinth 3 Função principal 4 int main 5 Inteiro sem sinal x inicializado com 7 6 uint32t x 7 7 Ponteiro px inicializado como nulo 8 uint32t px NULL 9 Ponteiro px recebe endereço da variável x 10 px x 11 Retornando zero 12 return 0 13 C 2022 Bruno Prado Departamento de Computação UFS 15 59 Ponteiros O que são apontadores ou ponteiros São um tipo de dado utilizado para referenciar o conteúdo de uma determinada região de memória Armazenam o endereço de memória ao invés do valor da variável 1 Padrão de tipos por tamanho 2 include stdinth 3 Função principal 4 int main 5 Inteiro sem sinal x inicializado com 7 6 uint32t x 7 7 Ponteiro px inicializado como nulo 8 uint32t px NULL 9 Ponteiro px recebe endereço da variável x 10 px x 11 Retornando zero 12 return 0 13 C 2022 Bruno Prado Departamento de Computação UFS 16 59 Ponteiros Conteúdo da memória Endereço Memória Variável 0x80000004 0x80000000 px 0x80000000 0x00000007 x C 2022 Bruno Prado Departamento de Computação UFS 17 59 Ponteiros Referenciando o ponteiro Operador 1 Padrão de tipos por tamanho 2 include stdinth 3 Biblioteca de ES 4 include stdioh 5 Função principal 6 int main 7 8 Ponteiro px recebe endereço da variável x 9 px x 10 Imprimindo informações 11 printfmainxup px px 12 Atualizando valor de x 13 px 3 14 Retornando zero 15 return 0 16 main x 7 0x80000000 C 2022 Bruno Prado Departamento de Computação UFS 18 59 Ponteiros Conteúdo da memória Endereço Memória Variável 0x80000004 0x80000000 px 0x80000000 0x00000003 x C 2022 Bruno Prado Departamento de Computação UFS 19 59 Ponteiros Passagem de parâmetro por valor 1 Padrão de tipos por tamanho 2 include stdinth 3 Biblioteca de ES 4 include stdioh 5 Função f 6 void fuint32t x 7 Imprimindo o parâmetro x 8 printffxu x 9 Modificando o parâmetro x 10 x 1 11 Imprimindo o parâmetro x 12 printffxu x 13 14 Função principal 15 int main 16 17 C 2022 Bruno Prado Departamento de Computação UFS 20 59 Ponteiros Passagem de parâmetro por valor 1 Padrão de tipos por tamanho 2 include stdinth 3 Biblioteca de ES 4 include stdioh 5 Função f 6 void fuint32t x 7 Imprimindo o parâmetro x 8 printffxu x 9 Modificando o parâmetro x 10 x 1 11 Imprimindo o parâmetro x 12 printffxu x 13 14 Função principal 15 int main 16 17 C 2022 Bruno Prado Departamento de Computação UFS 21 59 Ponteiros Passagem de parâmetro por valor 1 Padrão de tipos por tamanho 2 include stdinth 3 4 Função principal 5 int main 6 Inteiro sem sinal x inicializado com 11 7 uint32t x 11 8 Chamando a função f com parâmetro x 9 fx 10 Imprimindo valor de x 11 printfmainxu x 12 Retornando zero 13 return 0 14 f x 11 f x 1 main x 11 C 2022 Bruno Prado Departamento de Computação UFS 22 59 Ponteiros Conteúdo da memória Endereço Memória Variável 0x80000004 0x80000000 px 0x80000000 0x0000000B x C 2022 Bruno Prado Departamento de Computação UFS 23 59 Ponteiros Passagem de parâmetro por referência 1 Padrão de tipos por tamanho 2 include stdinth 3 Biblioteca de ES 4 include stdioh 5 Função f 6 void fuint32t x 7 Imprimindo o conteúdo de x 8 printffxu x 9 Incrementando o conteúdo de x 10 x 11 Imprimindo o parâmetro x 12 printffxu x 13 14 Função principal 15 int main 16 17 C 2022 Bruno Prado Departamento de Computação UFS 24 59 Ponteiros Passagem de parâmetro por referência 1 Padrão de tipos por tamanho 2 include stdinth 3 Biblioteca de ES 4 include stdioh 5 Função f 6 void fuint32t x 7 Imprimindo o conteúdo de x 8 printffxu x 9 Incrementando o conteúdo de x 10 x 11 Imprimindo o parâmetro x 12 printffxu x 13 14 Função principal 15 int main 16 17 C 2022 Bruno Prado Departamento de Computação UFS 25 59 Ponteiros Passagem de parâmetro por referência 1 Padrão de tipos por tamanho 2 include stdinth 3 4 Função principal 5 int main 6 Inteiro sem sinal x inicializado com 7 7 uint32t x 11 8 Chamando a função f com ponteiro de x 9 fx 10 Imprimindo valor de x 11 printfmainxu x 12 Retornando zero 13 return 0 14 f x 11 f x 12 main x 12 C 2022 Bruno Prado Departamento de Computação UFS 26 59 Ponteiros Conteúdo da memória Endereço Memória Variável 0x80000004 0x80000000 px 0x80000000 0x0000000C x C 2022 Bruno Prado Departamento de Computação UFS 27 59 Ponteiros Modificador const Proteger passagem por referência Permissão de somente leitura 1 Padrão de tipos por tamanho 2 include stdinth 3 4 Função f 5 void fconst uint32t x 6 Exibindo o conteúdo de x 7 printffxu x 8 Modificando o conteúdo de x 9 x 1 10 11 C 2022 Bruno Prado Departamento de Computação UFS 28 59 Ponteiros Modificador const Proteger passagem por referência Permissão de somente leitura 1 Padrão de tipos por tamanho 2 include stdinth 3 4 Função f 5 void fconst uint32t x 6 Exibindo o conteúdo de x 7 printffxu x 8 Modificando o conteúdo de x 9 x 1 10 11 maincpp910 error assignment of readonly location x C 2022 Bruno Prado Departamento de Computação UFS 29 59 Ponteiros Ponteiro de ponteiro 1 Biblioteca de ES 2 include stdioh 3 Função principal 4 int mainint argc char argv 5 args argv 6 char args argv 7 pargs args argv 8 char pargs args 9 Imprimindo parâmetros da main 10 printfmain is argc args 0 11 printfmain is argc pargs0 12 Retornando zero 13 return 0 14 main1 mainbin C 2022 Bruno Prado Departamento de Computação UFS 30 59 Ponteiros Ponteiro de ponteiro 1 Biblioteca de ES 2 include stdioh 3 Função principal 4 int mainint argc char argv 5 args argv 6 char args argv 7 pargs args argv 8 char pargs args 9 Imprimindo parâmetros da main 10 printfmain is argc args 0 11 printfmain is argc pargs0 12 Retornando zero 13 return 0 14 main1 mainbin main1 mainbin C 2022 Bruno Prado Departamento de Computação UFS 31 59 Ponteiros Conteúdo da memória Endereço Memória Variável 0xF0000004 mainbin argv 0xF0000000 0x00000001 argc 0x80000000 0xF0000004 args 0x80000004 0x80000000 pargs C 2022 Bruno Prado Departamento de Computação UFS 32 59 Ponteiros Ponteiro de função 1 Padrão de tipos por tamanho 2 include stdinth 3 Biblioteca de ES 4 include stdioh 5 Função fatorial 6 uint64t fatorialuint32t n 7 Resultado 8 uint64t r 1 9 Iterações de 2 n 10 foruint32t i 2 i n i 11 Multiplicação do resultado por i 12 r r i 13 Retorno do resultado 14 return r 15 16 Função principal 17 int main 18 19 C 2022 Bruno Prado Departamento de Computação UFS 33 59 Ponteiros Ponteiro de função 1 Padrão de tipos por tamanho 2 include stdinth 3 Biblioteca de ES 4 include stdioh 5 6 Função principal 7 int main 8 Ponteiro de função 9 uint64t pfuint32t NULL 10 Atribuição de endereço da função fatorial 11 pf fatorial 12 Imprimindo fatorial de 5 13 printffatorial 5lu pf5 14 Retornando zero 15 return 0 16 fatorial5 120 C 2022 Bruno Prado Departamento de Computação UFS 34 59 Alocação dinâmica Alocação dinâmica x estática Variáveis de tamanho conhecido em tempo de execução Alocada dinamicamente no segmento heap Gerenciado pelo programador Limitado pela memória disponível Variáveis de tamanho fixo previamente conhecido Alocada estaticamente nos segmentos data e bss Controlado pelo compilador Limitado pelo compilador e SO C 2022 Bruno Prado Departamento de Computação UFS 35 59 Alocação dinâmica Medindo o tamanho em bytes das variáveis Operador sizeof 1 Padrão de tipos por tamanho 2 include stdinth 3 Biblioteca de ES 4 include stdioh 5 Estrutura exemplo 6 typedef struct exemplo 7 Nome 8 const char nome 9 Idade 10 uint8t idade 11 exemplo 12 Função principal 13 int main 14 15 C 2022 Bruno Prado Departamento de Computação UFS 36 59 Alocação dinâmica Medindo o tamanho em bytes das variáveis Operador sizeof 1 2 Função principal 3 int main 4 Instanciando exemplo 5 exemplo a EstruturasdeDados 20 6 Imprimindo tamanho de tipos 7 printfsizeofalu sizeofa 8 printfsizeofanomelu sizeofanome 9 printfsizeofaidadelu sizeofaidade 10 Retornando zero 11 return 0 12 sizeofa 16 C 2022 Bruno Prado Departamento de Computação UFS 37 59 Alocação dinâmica Medindo o tamanho em bytes das variáveis Operador sizeof 1 2 Função principal 3 int main 4 Instanciando exemplo 5 exemplo a EstruturasdeDados 20 6 Imprimindo tamanho de tipos 7 printfsizeofalu sizeofa 8 printfsizeofanomelu sizeofanome 9 printfsizeofaidadelu sizeofaidade 10 Retornando zero 11 return 0 12 sizeofa 16 sizeofanome 8 C 2022 Bruno Prado Departamento de Computação UFS 38 59 Alocação dinâmica Medindo o tamanho em bytes das variáveis Operador sizeof 1 2 Função principal 3 int main 4 Instanciando exemplo 5 exemplo a EstruturasdeDados 20 6 Imprimindo tamanho de tipos 7 printfsizeofalu sizeofa 8 printfsizeofanomelu sizeofanome 9 printfsizeofaidadelu sizeofaidade 10 Retornando zero 11 return 0 12 sizeofa 16 sizeofanome 8 sizeofaidade 1 C 2022 Bruno Prado Departamento de Computação UFS 39 59 Alocação dinâmica Alocando memória dinamicamente Função void mallocsizet size 1 2 Função principal 3 int main 4 Ponteiro de inteiros de 32 bits sem sinal 5 uint32t vetor NULL 6 Alocando vetor com 100 elementos 7 vetor uint32t malloc 100 sizeofuint32t 8 Checagem de alocação 9 ifvetor NULL printfFalhanaalocação 10 else printfSucessonaalocação 11 Retornando zero 12 return 0 13 C 2022 Bruno Prado Departamento de Computação UFS 40 59 Alocação dinâmica Alocando memória dinamicamente Função void mallocsizet size 1 2 Função principal 3 int main 4 Ponteiro de inteiros de 32 bits sem sinal 5 uint32t vetor NULL 6 Alocando vetor com 100 elementos 7 vetor uint32t malloc 100 sizeofuint32t 8 Checagem de alocação 9 ifvetor NULL printfFalhanaalocação 10 else printfSucessonaalocação 11 Retornando zero 12 return 0 13 Falha na alocação C 2022 Bruno Prado Departamento de Computação UFS 41 59 Alocação dinâmica Alocando memória dinamicamente Função void mallocsizet size 1 2 Função principal 3 int main 4 Ponteiro de inteiros de 32 bits sem sinal 5 uint32t vetor NULL 6 Alocando vetor com 100 elementos 7 vetor uint32t malloc 100 sizeofuint32t 8 Checagem de alocação 9 ifvetor NULL printfFalhanaalocação 10 else printfSucessonaalocação 11 Retornando zero 12 return 0 13 Sucesso na alocação C 2022 Bruno Prado Departamento de Computação UFS 42 59 Alocação dinâmica Alocando memória dinamicamente Função void mallocsizet size Endereço base de 0x80000000 Tamanho alocado de 100 4 bytes 0 1 98 99 0x80000000 0x80000004 0x80000188 0x8000018C Ponteiro C 2022 Bruno Prado Departamento de Computação UFS 43 59 Alocação dinâmica Alocando e inicializando memória dinamicamente Função void callocsizet num sizet size 1 2 Função principal 3 int main 4 Ponteiro de inteiros de 32 bits sem sinal 5 uint32t vetor NULL 6 Alocando vetor com 100 elementos 7 vetor uint32t calloc 100 sizeofuint32t 8 Checagem de alocação 9 ifvetor NULL printfFalhanaalocação 10 else printfSucessonaalocação 11 Retornando zero 12 return 0 13 C 2022 Bruno Prado Departamento de Computação UFS 44 59 Alocação dinâmica Alocando e inicializando memória dinamicamente Função void callocsizet num sizet size 1 2 Função principal 3 int main 4 Ponteiro de inteiros de 32 bits sem sinal 5 uint32t vetor NULL 6 Alocando vetor com 100 elementos 7 vetor uint32t calloc 100 sizeofuint32t 8 Checagem de alocação 9 ifvetor NULL printfFalhanaalocação 10 else printfSucessonaalocação 11 Retornando zero 12 return 0 13 Falha na alocação C 2022 Bruno Prado Departamento de Computação UFS 45 59 Alocação dinâmica Alocando e inicializando memória dinamicamente Função void callocsizet num sizet size 1 2 Função principal 3 int main 4 Ponteiro de inteiros de 32 bits sem sinal 5 uint32t vetor NULL 6 Alocando vetor com 100 elementos 7 vetor uint32t calloc 100 sizeofuint32t 8 Checagem de alocação 9 ifvetor NULL printfFalhanaalocação 10 else printfSucessonaalocação 11 Retornando zero 12 return 0 13 Sucesso na alocação C 2022 Bruno Prado Departamento de Computação UFS 46 59 Alocação dinâmica Alocando e inicializando memória dinamicamente Função void callocsizet num sizet size Endereço base de 0x80000000 Tamanho alocado de 100 4 bytes 0 0 0 0 0 1 98 99 0x80000000 0x80000004 0x80000188 0x8000018C Ponteiro C 2022 Bruno Prado Departamento de Computação UFS 47 59 Alocação dinâmica Realocando memória dinamicamente Função void reallocvoid ptr sizet size 1 2 Ponteiro de realocação 3 uint32t r NULL 4 Realocando vetor com 1000 elementos 5 r uint32t reallocvetor 1000 sizeofuint32t 6 Checagem de alocação 7 ifr NULL printfFalhanarealocação 8 else 9 printfSucessonarealocação 10 Atualizando ponteiro 11 vetor r 12 13 Retornando zero 14 return 0 15 C 2022 Bruno Prado Departamento de Computação UFS 48 59 Alocação dinâmica Realocando memória dinamicamente Função void reallocvoid ptr sizet size 1 2 Ponteiro de realocação 3 uint32t r NULL 4 Realocando vetor com 1000 elementos 5 r uint32t reallocvetor 1000 sizeofuint32t 6 Checagem de alocação 7 ifr NULL printfFalhanarealocação 8 else 9 printfSucessonarealocação 10 Atualizando ponteiro 11 vetor r 12 13 Retornando zero 14 return 0 15 Falha na realocação C 2022 Bruno Prado Departamento de Computação UFS 49 59 Alocação dinâmica Realocando memória dinamicamente Função void reallocvoid ptr sizet size 1 2 Ponteiro de realocação 3 uint32t r NULL 4 Realocando vetor com 1000 elementos 5 r uint32t reallocvetor 1000 sizeofuint32t 6 Checagem de alocação 7 ifr NULL printfFalhanarealocação 8 else 9 printfSucessonarealocação 10 Atualizando ponteiro 11 vetor r 12 13 Retornando zero 14 return 0 15 Sucesso na realocação C 2022 Bruno Prado Departamento de Computação UFS 50 59 Alocação dinâmica Realocando memória dinamicamente Função void reallocvoid ptr sizet size 1 2 Ponteiro de realocação 3 uint32t r NULL 4 Realocando vetor com 1000 elementos 5 r uint32t reallocvetor 1000 sizeofuint32t 6 Checagem de alocação 7 ifr NULL printfFalhanarealocação 8 else 9 printfSucessonarealocação 10 Atualizando ponteiro 11 vetor r 12 13 Retornando zero 14 return 0 15 Sucesso na realocação C 2022 Bruno Prado Departamento de Computação UFS 51 59 Alocação dinâmica Realocando memória dinamicamente Função void reallocvoid ptr sizet size Endereço base de 0x80000000 Tamanho alocado de 100 4 bytes 1 2 99 100 0 1 98 99 0x80000000 0x80000004 0x80000188 0x8000018C Ponteiro C 2022 Bruno Prado Departamento de Computação UFS 52 59 Alocação dinâmica Realocando memória dinamicamente Função void reallocvoid ptr sizet size Endereço base 0x80008000 Tamanho realocado de 1000 4 bytes 1 100 0 99 998 999 0x80008000 0x8000818C 0x80008F98 0x80008F9C Ponteiro C 2022 Bruno Prado Departamento de Computação UFS 53 59 Alocação dinâmica Liberando memória alocada Função void freevoid ptr 1 2 Biblioteca padrão 3 include stdlibh 4 5 Função principal 6 int main 7 8 Liberando memória alocada 9 freevetor 10 Invalidando ponteiro 11 vetor NULL 12 Retornando zero 13 return 0 14 C 2022 Bruno Prado Departamento de Computação UFS 54 59 Alocação dinâmica Liberando memória alocada Função void freevoid ptr 1 2 Biblioteca padrão 3 include stdlibh 4 5 Função principal 6 int main 7 8 Liberando memória alocada 9 freevetor 10 Invalidando ponteiro 11 vetor NULL 12 Retornando zero 13 return 0 14 C 2022 Bruno Prado Departamento de Computação UFS 55 59 Alocação dinâmica Erros comuns de programação Ponteiros não inicializados ou não invalidados Segmentation Fault Região de memória sem nenhum ponteiro Memory Leak Falta de controle nos limites de memória Buffer Overflow C 2022 Bruno Prado Departamento de Computação UFS 56 59 Alocação dinâmica Erros comuns de programação Ponteiros não inicializados ou não invalidados Segmentation Fault Região de memória sem nenhum ponteiro Memory Leak Falta de controle nos limites de memória Buffer Overflow C 2022 Bruno Prado Departamento de Computação UFS 57 59 Alocação dinâmica Erros comuns de programação Ponteiros não inicializados ou não invalidados Segmentation Fault Região de memória sem nenhum ponteiro Memory Leak Falta de controle nos limites de memória Buffer Overflow C 2022 Bruno Prado Departamento de Computação UFS 58 59