Ir ao conteúdo
  • Cadastre-se

Programa parando de funcionar


SecretFox

Posts recomendados

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):

 

#include <stdio.h>

char func (void) {
    char vet[20];
    int count;
    for (count = 0 ; vet[count] != 0 ; count++) {
        vet[count] = 'T';
    }
    vet[count] = 0;
    return vet;
}

int main () {
    char *pt;
    pt = func();
    puts(pt);
}
 

Link para o comentário
Compartilhar em outros sites

@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.

Link para o comentário
Compartilhar em outros sites

Mas se você fizer assim, por exemplo: 

 

#include <stdio.h>

int retorna () {
    int  v[4], i;
    for (i = 0; i < 4 ; i++) {
        v = 2;
    }
    return v;
}

int main(){
    int *pt;
    pt = retorna();
    printf("%d %d %d %d", pt, pt[1], pt[2], pt[3]);
}
 

 

Ele pega normalmente o endereço.

Link para o comentário
Compartilhar em outros sites

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:
 

#include <stdio.h>
#include <stdlib.h>

int* retorna () {
    int*  v, i;
    v = (int*) malloc( sizeof(int)*4 );
    
    
    for ( i = 0; i < 4 ; i++ ) {
        v[i] = 2;
    }
    
    return v;
}
int main() {
    int *pt;
    pt = retorna();
    printf ( "%d %d %d %d", pt[0], pt[1], pt[2], pt[3] );
    
    free(pt);
    return 0;
}

O que você ta tentando fazer, hipoteticamente falando, si fosse possível e o compilador não mostrasse erros, esta errado essa lógica.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

4 horas atrás, SecretFox disse:

@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.

@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++.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...