Ir ao conteúdo

C Problemas com a funcao free()


Ir à solução Resolvido por Ansi C,

Posts recomendados

  • Membro VIP
Postado

Olá, eu estava fazendo um programa para testar a funcao malloc, só que quando uso a funcao free() o programa trava e retorna o valor: 3221226356

O meu programa é o seguinte:

 

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

// o objetivo desse programa é estudar o uso da alocação dinamica (com malloc) para fazer matrizes

int main() {
    int linhas = 3; // numero de linhas da matriz
    int colunas = 3; // numero de colunas da matriz
    int x = 0;
    int y = 0;
    int *pont1;
    pont1= (int *) malloc(linhas * colunas * sizeof(int));
    // aqui está pronta a matriz
    pont1[(colunas * y ) + ( x )  ]; // e assim que se acessa os valores da matriz, na realidade e um vetor,// mas acessamos como se fosse uma matriz
    //      ^linha^                    ^coluna
    for( y = 0 ; y <= linhas ; y++ ){
        for( x = 0 ; x <= colunas ; x++ ){
            pont1[(colunas * y ) + ( x )  ] = x;
            printf(" %d ",pont1[(colunas * y ) + ( x )  ]);
        }
        printf("\n");
        
    }
    printf(" teste "); // essa linha eh imprimida
    free(pont1);
    printf(" teste222 "); // essa linha nao eh imprimida

    return 0;

    }

Agradeço quem puder me ajudar.

 

 

  • Curtir 1
  • Solução
Postado

Olha funciona muito bem! Parabéns pela documentação também não perda o tesão nisso de jeito maneira.

 

/*  Principal função de um programa escrito em c */
int main(void)
{
    int *vetor, linhas, y, colunas, x;
    linhas = 3; /*  numero de linhas da matriz */  y= 0;
    colunas= 3; /*  numero de colunas da matriz */ x= 0;
    
    vetor= (int *) malloc(linhas * colunas * sizeof(int));
    // aqui está pronta a matriz
    
    (void) vetor[(colunas * y) + (x)]; /*  e assim que se acessa os valores da
    matriz, na realidade e um vetor, mas acessamos como se fosse uma matriz
                          ^Linha  ^Coluna */
                    
    for (y= 0; y < linhas; ++y){
        for (x= 0; x < colunas; ++x){
            vetor[(colunas * y) + (x)]= x;
            printf("%d ", vetor[(colunas * y) + (x)]);
        }
        printf("\b.\n");
        
    }
    printf("teste "); /*  essa linha eh  imprimida */ 
    
    free(vetor);
    
    printf(" teste222 "); /*  essa linha não eh imprimida */
    return 0;
}

 

  • Obrigado 1
  • Membro VIP
Postado

Muito obrigado por tudo! Testei aqui, está funcionando mesmo, me ajudou bastante. Ah não vou perder o tesão não haha estou gostando bastante de programação.

Só fiquei com uma duvida no seu código.Tem uma parte você escreveu :

(void) vetor[(colunas * y) + (x)];

Só não entendi a finalidade do "(void)".

 

 

Postado
1 hora atrás, Arthur Vandellay disse:

Só fiquei com uma duvida no seu código.Tem uma parte você escreveu :

(void) vetor[(colunas * y) + (x)];

Só não entendi a finalidade do "(void)".

Para uma expressão ficar completa faz sentido que uma variável / ou outra expressão / receba a informação /ou valor/ que foi indicada pela referência do no vetor, ou seja, em uma situação de atribuição uma outra variável receberia o valor (lvalue) que sai da declaração do vetor (rvalue). Porém com não exitem expressão lvalue, usei um cast com tipo void para encerrar todo ciclo semântico.

 

Imagem Ilustrativa do Alerta (Semântico) [sujeita a exclusão]

image.png.1927825ea8be925ec4ed62eeaec8d7ca.png

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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