ApprenticeX
(usa FreeBSD)
Enviado em 31/01/2023 - 22:43h
alexabolada escreveu: O código acima resulta em um Segmentation fault porque está se acessando um espaço de memória que não tem permissão para escrita. Isso ocorre porque na primeira chamada da função Change() o compilador cria uma váriável Text no stack frame, ou seja, o que está dentro da função já é um endereço de memória diferente do segundo argumento. Quando o compilador recebe o segundo argumento, ele está literalmente acessando a string "Slackware" e não um endereço de memória, de modo que tentando acessar a localização de memória e alterar a string não é possível, já que esta não pertence ao Stack Frame da função.
Eu entendi e não entendi!
alexabolada escreveu: Isso ocorre porque na primeira chamada da função Change() o compilador cria uma váriável Text no stack frame
Não sei o que quer dizer com stack frame, penso que deve ser alguma área da memória
alexabolada escreveu: ou seja, o que está dentro da função já é um endereço de memória diferente do segundo argumento.
Entendo que o que está dentro da função seja a variável da própria função que claro acredito ser um endereço de memória diferente, mas isso para os 2 casos, visto que os 2 casos, enviam um texto para a variável da função, ou seja, porque é diferente o texto se os textos são iguais e representam-se iguais, ou seja o ponteiro da função aponta 1º para 1 e depois aponta para o outro local, a única diferença é o endereço de memória mas o valor de ambos são iguais.
alexabolada escreveu: Quando o compilador recebe o segundo argumento, ele está literalmente acessando a string "Slackware" e não um endereço de memória, de modo que tentando acessar a localização de memória e alterar a string não é possível, já que esta não pertence ao Stack Frame da função.
Aqui entendi sobre a string, mas penso, uma vez que a string foi enviada para o ponteiro da função, que é um ponteiro, ou seja, ele não recebe valor, ele recebe um endereço da memória onde foi alocada essa "STRING", logo dentro da função não existe String e sim um ponteiro apenas que está apontando para o endereço de memória onde está a String, e estou tentando mudar a posição para onde o ponteiro aponta, para então eu poder modificar o valor que está na memória.
Essa é a parte que ficou confusa!