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.

Multiplicación estática de vectores utilizando C++, programa no funciona.

He recibido esta tarea, pero este programa no está funcionando y la salida no está saliendo correctamente. Este programa se compila correctamente, pero da el error – Segmentation fault (core dumped). No entiendo por qué está pasando esto. Por favor, dime cuál es el problema en el siguiente código:

“`cpp
#include
using namespace std;
class Vector
{
int *V;
int size;
public:
Vector(int m)
{
V = new int[size=m];
for(int i=0; i<size; i++=”” )=”” {=”” v[i]=”0;” }=”” }=”” vector(const=”” int=”” *a)=”” {=”” for(int=”” i=””></size;><size;i++) {=”” v[i]=”a[i];” }=”” }=”” int=”” operator=”” *=”” (vector=”” &y)=”” {=”” int=”” sum=”0;” for(int=”” i=””></size;i++)><size;i++) {=”” sum+=”this-“>V[i] * y.V[i];
}
return sum;

}
void printVector()
{
    for(int i=0;i<size;i++) {="" printf("%d\t",this-="">V[i]);
    }
}

};
int main()
{
int x[3] = {1,2,3};
int y[3] = {4,5,6};

Vector V1(3);
Vector V2(3);
V1.printVector();
V2.printVector();
V1 = x;
V2 = y;
V1.printVector();
V2.printVector();
int r = V1*V2;
cout<<endl<<"r ==""></endl<<"r><><endl;

}
}=""></endl;
}
></size;i++)></size;i++)>

Tags:  ,

Answer

  1. Avatar for davy.ai

    Hay algunos problemas con el código proporcionado que resultan en un error de violación de segmento:

    1. En el constructor Vector(const int *a), el tamaño del vector no se está inicializando. Por lo tanto, el bucle donde se copian los valores a V arroja un error de violación de segmento. Es necesario pasar el tamaño del vector junto con el puntero para inicializar el vector correctamente.
    2. En la función main(), cuando se asignan los arreglos x e y a los vectores V1 y V2, respectivamente, el operador de asignación no está sobrecargado correctamente para asignar arreglos a un vector. Esto se puede lograr recorriendo el arreglo y asignando valores a V.

    Para solucionar los problemas, el código debe modificarse de la siguiente manera:

    #include<iostream>
    using namespace std;
    
    class Vector
    {
        int *V;
        int size;
        public:
        // Agregar constructor por defecto
        Vector() {
            V = NULL;
            size = 0;
        }
    
        Vector(int m)
        {
            V = new int[size=m];
            for(int i=0; i< size; i++ )
            {
                V[i] = 0;
            }
        }
    
        // Agregar constructor parametrizado para inicializar el vector con un arreglo y su tamaño
        Vector(const int *a, int m)
        {
            V = new int[size = m];
            for(int i=0; i< size; i++)
            {
                V[i] = a[i];
            }
        }
    
        // Agregar constructor de copia
        Vector(const Vector &other)
        {
            V = new int[size = other.size];
            for(int i=0; i< size; i++)
            {
                V[i] = other.V[i];
            }
        }
    
        // Agregar operador de asignación para asignar un arreglo a un vector
        Vector& operator=(const int *a)
        {
            for(int i=0; i< size; i++)
            {
                V[i] = a[i];
            }
            return (*this);
        }
    
        int operator * (Vector &y)
        {
            int sum = 0;
            for(int i=0;i< size;i++)
            {
                sum += this->V[i] * y.V[i];
            }
            return sum;
        }
    
        void printVector()
        {
            for(int i=0;i< size;i++)
            {
                printf("%d\t", this->V[i]);
            }
        }
    };
    
    int main()
    {
        int x[3] = {1,2,3};
        int y[3] = {4,5,6};
    
        // Llamar al constructor por defecto
        Vector V1;
        Vector V2;
    
        // Llamar al constructor parametrizado con un arreglo y su tamaño
        Vector V3(x, 3);
        Vector V4(y, 3);
    
        V3.printVector();
        V4.printVector();
    
        // Asignar arreglo a vector usando el operador de asignación
        V1 = x;
        V2 = y;
    
        V1.printVector();
        V2.printVector();
    
        int r = V1*V2;
        cout<<endl<<"r ==""></endl<<"r><><endl;
    }
    

    además de las correcciones, el código ahora incluye un constructor por defecto, un constructor de copia y también sobrecarga el operador de asignación para asignar correctamente un arreglo a un vector. estas adiciones aseguran que el objeto de vector se inicialice correctamente y evita cualquier error de violación de segmento. }=”” ="" además="" de="" las="" correcciones,="" el="" código="" ahora="" incluye="" un="" constructor="" por="" defecto,="" un="" constructor="" de="" copia="" y="" también="" sobrecarga="" el="" operador="" de="" asignación="" para="" asignar="" correctamente="" un="" arreglo="" a="" un="" vector.="" estas="" adiciones="" aseguran="" que="" el="" objeto="" de="" vector="" se="" inicialice="" correctamente="" y="" evita="" cualquier="" error="" de="" violación="" de=""></endl;
    }

    además de las correcciones, el código ahora incluye un constructor por defecto, un constructor de copia y también sobrecarga el operador de asignación para asignar correctamente un arreglo a un vector. estas adiciones aseguran que el objeto de vector se inicialice correctamente y evita cualquier error de violación de segmento.>

Comments are closed.