[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Alocaçãodinâmica...



On Tue, Apr 24, 2001 at 05:39:10PM -0300, Raphael DephiNit Pereira wrote:
>         if (!(*matriz = (float *) malloc((i * (sizeof(float *))))))
(...)
>         float **matriz;
hmmm essas duas coisas me parecem erradas... principalmente a primeira...
se meu senso está bom você declarou um ponteiro pra ponteiro e depois
inicia um ponteiro derreferenciado... quero dizer... inicializa um
ponteiro... mas não vi incrementação nenhuma no ponteiro nem nada...
será que falei meio grego? acho que falei grego até pra mim mesmo...
minha redação hoje não tá boa...

> 
> Não viram diferença? Olhem a posição da declaração do "float **matriz;". Isso 
> deixou o meu programa funcionando! Agora eu pergunto: isto é normal? É uma 
> regra que eu não sei (Já que aprendi a programar sozinho)? Esqueci de algo na 
> linha de comando do gcc ( que foi "gcc -Wall -o gauss-jordan 
> gauss-jordan.c")? É um bug? 
cara... se existe essa regra eu não conheço... isso parece mais é com
bug no gcc... 

o que sei é que seu jeito de fazer não me parece certo... eu tenho,
nos gklogs mais novos um algoritmo que usa alocação dinâmica de
strings para alocar as regras do arquivo de configuração... se você
quiser dar uma olhada, estamos num mundo livre =):

olha só isso:

declaração das variáveis:
---
/* s1 is the pattern, s2 the subpattern and s3 the collor
 * they're declared like this cause they are filled dynamically
 * s1&s2=s3 -> Pattern&Sub Pattern=color
 */

char **s1 = NULL, **s2 = NULL, **s3 = NULL;

/* Number of rules read by ReadRules */
int numrules = 0;
---

tá bom, não precisa dizer que meu programa é porco... eu sei que
é...

preenchimento:
--
int ReadRules (char *conf)
{
  FILE *file; // rule file to be opened
  char *tmp;
  char s[RULELEN_MAX];
  int i;

  file = fopen (conf, "r");
  if (file == NULL)
    {
      perror ("Opening rules file");
      return 1;
    }
	
  for (i = 0 ; fgets(s, RULELEN_MAX, file) ; i++)
    {
      if ((tmp = strtok (s, "&")) == NULL)
	{
	  i--;
	  continue;
	}
      s1 = realloc (s1, sizeof(char*)*(i+1));
      s1[i] = malloc (RULELEN_MAX);
      strncpy (s1[i], tmp, RULELEN_MAX); 

      if ((tmp = strtok (NULL, "=")) == NULL)
	{
	  i--;
	  continue;
	}
      s2 = realloc (s2, sizeof(char*)*(i+1));
      s2[i] = malloc (RULELEN_MAX);
      strncpy (s2[i], tmp, RULELEN_MAX); 

      if ((tmp = strtok (NULL, "\n")) == NULL)
	{    
	  if ((tmp = strtok (NULL, " ")) == NULL)
	    {
	      i--;
	      continue;
	    }
	}
      s3 = realloc (s3, sizeof(char*)*(i+1));
      s3[i] = malloc (RULELEN_MAX);
      strncpy (s3[i], tmp, RULELEN_MAX); 
    }

  numrules = i-1;

  fclose (file);
  return 0;
}
--

note que esse código preenche 3 vetores de strings dinâmicamente... 
1 vetor de strings é uma matriz, então é basicamente o
que você quer... se você quiser olhar o código todo pra entender
melhor: (esse código está em analyze.c)

deb-src http://people.debian.org/~kov/debian source

manda um 'apt-get source gklog' pra pegar a mais nova versão...

[]s! =)

-- 
       Gustavo Noronha Silva - kov <http://www.metainfo.org/kov>
*--------------------------------------------------------------------------*
|  .''`.  | Debian GNU/Linux - A matter of quality <http://www.debian.org> |
| : :'  : |Debian-BR enlarging frontiers <http://debian-br.sourceforge.net>|
| `. `'`  |                  Be Happy! Be FREE!                            |
|   `-    |             "Think globaly, act localy!"                       |
*--------------------------------------------------------------------------*

Attachment: pgpa8w0rUlreL.pgp
Description: PGP signature


Reply to: