es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Actualización de un arreglo (pasado como parámetro) dentro de una función de C++.

Tengo la siguiente declaración y llamada de función:

unsigned int myArray[5] = {0, 0, 0, 0, 0};
ModifyArray(&myArray[0]);

El código anterior no se puede modificar, se proporciona tal cual.

Necesito escribir la implementación de ModifyArray para actualizar myArray para que contenga 1, 2, 3, 4, 5.

Lo he escrito de la siguiente manera:

void ModifyArray(unsigned int * out_buffer)
{
unsigned int updatedValues[5] = {0, 0, 0, 0, 0};
updatedValues[0] = 1;
updatedValues[1] = 2;
updatedValues[2] = 3;
updatedValues[3] = 4;
updatedValues[4] = 5;
*out_buffer = &updatedValues;
}

Esto no parece funcionar realmente. Tengo la sensación de que no estoy haciendo la asignación correctamente en la última línea de código, sin embargo, he intentado varias variaciones y aún así no parece actualizar solo el elemento 0 del array.

¿Qué estoy haciendo mal? ¡Gracias!

PD. Por favor, tenga en cuenta que el escenario es más complejo de lo presentado aquí. He simplificado para facilitar la lectura, pero el código debería verse muy similar a este, solo la última asignación debería actualizarse a una correcta si es posible.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema con la implementación actual de la función ModifyArray es que está creando un array local llamado “updatedValues” y asignando su dirección a la variable puntero “out_buffer”, lo cual es incorrecto. El array local se destruirá después de que la función salga y el puntero “out_buffer” estará apuntando a una memoria inválida.

    Para actualizar “miArray” con valores del 1 al 5, podemos simplemente usar un bucle for para asignar cada valor al índice correspondiente de “miArray” a través del puntero “out_buffer”.

    La implementación correcta de la función ModifyArray es:

    c++
    void ModifyArray(unsigned int * out_buffer)
    {
    for (int i = 0; i < 5; i++) {
    *(out_buffer + i) = i + 1;
    }
    }

    En esta implementación, recorremos el array utilizando el puntero “out_buffer” y asignamos cada valor (i+1) al índice actual. Esto actualizará correctamente “miArray” con valores del 1 al 5.

Comments are closed.