Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

199
Visualizações
Bucle de índice de matriz para comenzar en lugar de error de acceso a mem

Actualmente estoy desarrollando un sistema de visión que se controla/supervisa a través de una aplicación informática que estoy escribiendo en C/C++. Si te preguntas por qué estoy escribiendo en C/C++ es básicamente que mi sensor de visión (LMI Gocator 2490) tiene funciones desarrolladas en C y que estoy usando opencv (C++) para analizar sus datos. Para resumir, he tenido 1 curso de informática que estaba en C y soy malo en C++.

Me pregunto si hay una manera simple, usando o escribiendo una función, por ejemplo, para recuperar un índice de matriz que regresa a su comienzo en lugar de intentar leer y escribir en un índice que no es parte de la matriz que también causa violación de acceso a la memoria. Por ejemplo:

 long a[4]; for (size_t i = 0; i < sizeof(a) / sizeof(long); i++) { if (a[i] && a[i + 1]) //Define some conditions regarding a[i] and a[i+1] { //Process code } }

Entonces aquí, es fácil entender que cuando alcance el valor de 3, obtendré una violación de acceso a la memoria. Lo que me gustaría hacer es tener algún tipo de mecanismo que devuelva un índice de matriz que "bucle" de regreso al principio. En el caso que se muestra arriba, i+1 donde i = 3 sería 0. Si tuviera que poner i+2, me gustaría obtener 1, y así sucesivamente...

Esto puede ser una tontería, pero me ahorraría el dolor de escribir 4 veces la misma lógica en alguna declaración de cambio/caso dentro de un ciclo for que luego tendría que aplicar modificaciones en las 4 lógicas al depurar... ¡Gracias!

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

use el módulo para envolver al alcanzar el límite superior

 long a[4]; size_t sz = sizeof(a) / sizeof(long); for (size_t i = 0; i < sz; i++) { if (a[i] && a[(i + 1) % sz]) //Define some conditions regarding a[i] and a[i+1] { //Process code } }

aunque tal vez no sea un rendimiento superóptimo (bueno, con un valor de 4, el compilador puede intercambiar módulo por máscara, por lo que estaría bien).

En el caso general, evite una división y verifique si se excede, luego elija 0 si lo hace

 for (size_t i = 0; i < sz; i++) { size_t j = i < sz-1 ? i+1 : 0; if (a[i] && a[j]) //Define some conditions regarding a[i] and a[i+1] { //Process code } }

(el código funcionará en C y C++)

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda