Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

gRoOvE

comparar matriz com elemento que nao existe

Recommended Posts

Estava implementando um fonte aqui, e tava dando um bug que nao conseguia descobrir...

 

char M[3][3];
estava tentando comparar M[0][2] == M[0][3], ou seja, com um elemento que nao existe, essa comparação sempre retornava verdadeiro, pq isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

era + ou - assim:

if ((M[0][1] == M[0][2]) && (M[0][2] == M[0][3]))
mas tipo, o valor de M[0][2] era 5 digamos, nesse caso comparava o 5 com outro numero qualquer da memória, não faz sentido retornar verdadeiro isso "/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz se o 'outro numero qualquer' for 5. E porque você está acessando a 4a coluna da matriz de 3 colunas? você está comparando com um valor aleatório na RAM. Se for 5 a comparacao vai ser verdadeira.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez M[1][0] seja igual a M[0][2]? Aqui no meu compilador a matriz [3][3] ali se eu tento acessar [0][3] eu acabo pegando [1][0], talvez pelo modo como a memória está organizada:

 

#include <stdio.h>

int main()
{
	char M[3][3];
	int x;
	
	for(x = 0; x<9; x++)
	{
		M[x / 3][x % 3] = x;
	}
	for(x = 0; x < 9; x++)
	{
		printf("M[%d][%d] = %d\n", x / 3, x % 3, (int)M[x / 3][x % 3]);
	}
	M[0][3] = 50;
	printf("\n\n");
	for(x = 0; x < 9; x++)
	{
		printf("M[%d][%d] = %d\n", x / 3, x % 3, (int)M[x / 3][x % 3]);
	}
	getchar();
	return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao é nada absurdo.A memoria é linear.O int M[3][3] está alocando 3 pedacos de memoria de 12 bytes cada um.

Então fisicamente é tudo uma linha com 36 bytes = 9 posições de 4 bytes

 

Não é a toa que da pra usar o memset no lugar do loop p/ zerar uma matriz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.