Programa parando de funcionar - C/C#/C++ - Clube do Hardware
Programa parando de funcionar
Por SecretFox, 7 de março de 2016 em C/C#/C++
SecretFox 1
Nenhum/NN
Olá, sou novo no fórum e queria começar já tirando uma dúvida...
Eu fiz um programa e ele compilou normal, mas aparentemente ele trava quando tá rodando. Com certeza tem algo errado e gostaria que vocês pudessem me dizer o que é.
Aqui tá o código numa versão resumida (o original era mais extenso e está em outro computador, mas a ideia é a mesma):
char func (void) {
char vet[20];
for (count = 0 ; vet[count] != 0 ; count++) {
vet[count] = 'T';
vet[count] = 0;
pt = func();
@SecretFox Você quer pegar o endereço de uma variável local? eu acho meio difícil, até onde eu saiba, as variáveis locais são desalocadas no termino do bloco. o melhor que você faz é passar um ponteiro de char como parâmetro da função, e dentro da função você aloca dinamicamente.
Mas se você fizer assim, por exemplo:
int retorna () {
pt = retorna();
printf("%d %d %d %d", pt, pt[1], pt[2], pt[3]);
Ele pega normalmente o endereço.
uma variavel normal só tem validade durante a vida de uma função, quando você invocar uma função, só então nessa hora serão criados o conjunto de variáveis que foram declarados dentro da função em questão la na memoria RAM, porém quando a função terminar, essa memoria será liberada, se você receber(no caso que fosse possível) o ponteiro dessa memoria, saiba que outro programa pode tomar o controle desse espaço, e por valores não desejados, para fazer o que você quer o correto é usar a freestorage, ou seja, alocação dinâmica de memoria (malloc, free, etc), as variáveis declaradas com malloc só serão liberadas com free, incluso si esquecer de liberar essa memoria ela continuará aí até apagar o computador. A solução que você está buscando é essa:
int* retorna () {
int*  v, i;
v = (int*) malloc( sizeof(int)*4 );
printf ( "%d %d %d %d", pt[0], pt[1], pt[2], pt[3] );
O que você ta tentando fazer, hipoteticamente falando, si fosse possível e o compilador não mostrasse erros, esta errado essa lógica.
@vangodp Valeu cara. Eu tava estudando ponteiros, mas ainda não cheguei na parte de alocação dinâmica, vou avançar no estudo então. Obrigado mesmo.
4 horas atrás, SecretFox disse:
@SecretFox Não faça isso, entenda bem primeiro aos ponteiros para depois passar ao seguinte nivel, um dos conselhos que dou e que ninguém segue é nunca avançar si nao entendeu o anterior, só vai dar lugar a um conhecimento pobre e deficiente, ainda mais os tais ponteiros. >_< Ponteiros é um dos mais importantes poderosos recursos na linguagem C/C++.
Não, não, quando eu falei que tava estudando ponteiros eu quis dizer que já tinha terminado, kkk, deu pra entender bem, na verdade, quando eu fiz o tópico eu tava vendo strings. Agora to em alocação dinâmica. Valeu aí.