• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Dinar al-khattab

Matrizes em memória Dinâmica

4 mensagens neste tópico

Eu aloquei uma matriz em memória dinâmica, mas não lhe consigo aceder aos campos. Alguém me pode dizer como é que posso alocar a matriz em memória dinâmica para eu ver se fiz bem, e como posso aceder aos seus campos.

Isto foi como eu fiz.

novo->dotplot.matriz=(char*)malloc(sizeof (char)*(strlen((sequencia1)+1))*(strlen((sequencia2)+1)));

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

wow. G'anda expressão.

Queres aceder aos campos do quê, exactamente? Estás a alocar memória num apontador para char, isso não tem campos. Os campos a que podes aceder são os das structs dotplot e do apontado por novo, mas aparentemente a esses já estás a aceder.

Mete aí o código do que não estás a conseguir fazer para ver se se percebe melhor...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu tenho esta estrutura:

typedef struct sdot
{

        int identificador;
        char *matriz,*sequencia1,*sequencia2;
}T_DOT;

typedef struct listadot
{
       T_DOT dotplot;
       struct listadot *prox;
       struct listadot *ant;

}T_LDOT;

Quero alocar memoria naquele ponteiro matriz. Mas a matriz tem que ter de lado o tamanho da (sequencia1 + 1) e (sequencia 2 +1).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se te está a dar erro quando tentas indexar a variável matriz, provavelmente estás a tentar aceder-lhe com 2 índices

matriz[a][b];

mas com memória dinâmica só podes aceder com um índice

matriz[a * (strlen(sequencia2)+1) + b];

Reparei agora que tens um problema na linha do malloc. Estás a fazer

strlen((sequencia2)+1)

e o que queres é

(strlen(sequencia2)+1)

senão estás a incrementar o apontador em vez do tamanho. E o mesmo acontece para a sequencia1.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora