Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Duvida] Alocação dinâmica para array de struct

Boa noite, Existe alguma forma de eu alocar dinamicamente um array de struct ? Estou procurando alguns exemplos funcionais porém não consigo encontrar nenhum. Abaixo vou exemplificar com código o que gostaria de fazer, lembrando que o código não está funcionando, por isso a minha duvida.

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

struct pessoa 
{
    int codigo;
    int status;
};

typedef struct pessoa PESSOA;

int main()
{
    PESSOA *ponteiroPessoa; 

    ponteiroPessoa = malloc(2 * sizeof(PESSOA));

    ponteiroPessoa[0]->codigo = 1;
    ponteiroPessoa[0]->status = 1;

    ponteiroPessoa[1]->codigo = 2;
    ponteiroPessoa[1]->status = 2;

    printf("%d \n", ponteiroPessoa[0]->codigo);
    printf("%d \n", ponteiroPessoa[1]->codigo);

    free(ponteiroPessoa[0]);
    free(ponteiroPessoa[1]);
    free(ponteiroPessoa);

    return 0;
}
2 respostas

Olá,

Uma possível solução é:

PESSOA* array = (PESSOA*)malloc(sizeof(PESSOA) * 100);

Té mais,

solução!

Bom dia, Meu problema era que eu estava querendo criar um ponteiro apontando para mais de uma estrutura. Nesse caso eu tive que usar como exemplo a criação de uma matriz, tive que ter um array de ponteiros onde cada ponteiro apontasse para minha estrutura. Segue código de exemplo que funciona abaixo caso alguém mais passe por esse problema.

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

struct posicao
{
    int linha;
    int coluna;
};

typedef struct posicao POSICAO;

int main()
{
    POSICAO **ponteiroPosicao;

    ponteiroPosicao = malloc(2 * sizeof(POSICAO*));
    ponteiroPosicao[0] = malloc(sizeof(POSICAO));
    ponteiroPosicao[1] = malloc(sizeof(POSICAO));

    ponteiroPosicao[0]->linha = 1;
    ponteiroPosicao[0]->coluna = 1;

    ponteiroPosicao[1]->linha = 2;
    ponteiroPosicao[1]->coluna = 2;

    printf("Primeira posicao: %d %d\n", ponteiroPosicao[0]->linha, ponteiroPosicao[0]->coluna);
    printf("Segunda posicao: %d %d\n", ponteiroPosicao[1]->linha, ponteiroPosicao[1]->coluna);

    free(ponteiroPosicao[0]);
    free(ponteiroPosicao[1]);
    free(ponteiroPosicao);    

    system("pause");
}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software