Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. Matrix not getting initialized

Matrix not getting initialized

Scheduled Pinned Locked Moved C / C++ / MFC
c++linqgraphicsalgorithmsdata-structures
4 Posts 2 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Offline
    L Offline
    Lost User
    wrote on last edited by
    #1

    Consider the following code "main.cpp"

    #include
    #include "../include/ESSolver.h"

    int mu;
    int lambda ;

    int main(void)
    {
    mu = 5;
    lambda = 10;

    ESSolver es;
    
    es.Init();
    
    es.Optimize();
    	
    return 0;
    

    }

    "ESSolver.h"

    extern int mu;
    extern int lambda ;

    class ESSolver
    {
    public:
    const static int nVar = 4;

    ESSolver();
    ~ESSolver(void);
    
    void Init();
    void Optimize();
    int rand\_r(int, int);
    

    private:
    double (*muPop)[nVar];
    double *muSigma;

    double (\*lambdaPop)\[nVar\];
    double \*lambdaSigma;
    
    double (\*mulambdaPop)\[nVar\];
    double \*mulambdaSigma;
    

    };

    "ESSolver.cpp"

    #include <iostream>
    #include <cmath>
    #include <vector>
    #include <algorithm>
    #include <queue>

    #include "../include/ESSolver.h"

    using namespace std;

    ESSolver::ESSolver()
    {
    double _muPop [mu][nVar];
    muPop = _muPop;
    muSigma = new double[mu];

    double \_lambdaPop \[lambda\]\[nVar\];
    lambdaPop   = \_lambdaPop;
    lambdaSigma = new double\[lambda\];
    	
    double \_mulambdaPop \[mu+lambda\]\[nVar\];
    mulambdaPop   = \_mulambdaPop;
    mulambdaSigma = new double\[mu+lambda\];
    
    return;
    

    }

    ESSolver::~ESSolver(void)
    {
    if (muSigma) delete muSigma;
    if (lambdaSigma) delete lambdaSigma;
    if (mulambdaSigma) delete mulambdaSigma;
    return;
    }

    void ESSolver::Init()
    {
    // Initializing object variable
    for (int i = 0; i < mu; i++)
    {
    for (int j = 0; j < nVar; j++)
    {
    muPop[i][j] = 50;
    }
    }

    cout << "\\n----- muPop -----\\n";
    for (int i = 0; i < mu; i++)
    {
    	for (int j = 0; j < nVar; j++)
    	{
    		cout << muPop\[i\]\[j\] << " ";
    	}
    	cout << endl;
    }
    

    }

    void ESSolver::Optimize()
    {
    cout << "\n----- muPop -----\n";
    for (int i = 0; i < mu; i++)
    {
    for (int j = 0; j < nVar; j++)
    {
    cout << muPop[i][j] << " ";
    }
    cout << endl;
    }
    }

    On running the following code I am getting Output [^] As you can see from the image, Matrix is not getting initialized. Can anybody tell me why.

    CPalliniC 1 Reply Last reply
    0
    • L Lost User

      Consider the following code "main.cpp"

      #include
      #include "../include/ESSolver.h"

      int mu;
      int lambda ;

      int main(void)
      {
      mu = 5;
      lambda = 10;

      ESSolver es;
      
      es.Init();
      
      es.Optimize();
      	
      return 0;
      

      }

      "ESSolver.h"

      extern int mu;
      extern int lambda ;

      class ESSolver
      {
      public:
      const static int nVar = 4;

      ESSolver();
      ~ESSolver(void);
      
      void Init();
      void Optimize();
      int rand\_r(int, int);
      

      private:
      double (*muPop)[nVar];
      double *muSigma;

      double (\*lambdaPop)\[nVar\];
      double \*lambdaSigma;
      
      double (\*mulambdaPop)\[nVar\];
      double \*mulambdaSigma;
      

      };

      "ESSolver.cpp"

      #include <iostream>
      #include <cmath>
      #include <vector>
      #include <algorithm>
      #include <queue>

      #include "../include/ESSolver.h"

      using namespace std;

      ESSolver::ESSolver()
      {
      double _muPop [mu][nVar];
      muPop = _muPop;
      muSigma = new double[mu];

      double \_lambdaPop \[lambda\]\[nVar\];
      lambdaPop   = \_lambdaPop;
      lambdaSigma = new double\[lambda\];
      	
      double \_mulambdaPop \[mu+lambda\]\[nVar\];
      mulambdaPop   = \_mulambdaPop;
      mulambdaSigma = new double\[mu+lambda\];
      
      return;
      

      }

      ESSolver::~ESSolver(void)
      {
      if (muSigma) delete muSigma;
      if (lambdaSigma) delete lambdaSigma;
      if (mulambdaSigma) delete mulambdaSigma;
      return;
      }

      void ESSolver::Init()
      {
      // Initializing object variable
      for (int i = 0; i < mu; i++)
      {
      for (int j = 0; j < nVar; j++)
      {
      muPop[i][j] = 50;
      }
      }

      cout << "\\n----- muPop -----\\n";
      for (int i = 0; i < mu; i++)
      {
      	for (int j = 0; j < nVar; j++)
      	{
      		cout << muPop\[i\]\[j\] << " ";
      	}
      	cout << endl;
      }
      

      }

      void ESSolver::Optimize()
      {
      cout << "\n----- muPop -----\n";
      for (int i = 0; i < mu; i++)
      {
      for (int j = 0; j < nVar; j++)
      {
      cout << muPop[i][j] << " ";
      }
      cout << endl;
      }
      }

      On running the following code I am getting Output [^] As you can see from the image, Matrix is not getting initialized. Can anybody tell me why.

      CPalliniC Offline
      CPalliniC Offline
      CPallini
      wrote on last edited by
      #2

      Quote:

      double _muPop [mu][nVar]; muPop = _muPop;

      _mPop is a temporary array (a local variable), your muPop pointer is goingo to point to garbage.

      In testa che avete, signor di Ceprano?

      L 1 Reply Last reply
      0
      • CPalliniC CPallini

        Quote:

        double _muPop [mu][nVar]; muPop = _muPop;

        _mPop is a temporary array (a local variable), your muPop pointer is goingo to point to garbage.

        L Offline
        L Offline
        Lost User
        wrote on last edited by
        #3

        Thanks :)

        CPalliniC 1 Reply Last reply
        0
        • L Lost User

          Thanks :)

          CPalliniC Offline
          CPalliniC Offline
          CPallini
          wrote on last edited by
          #4

          You are welcome.

          In testa che avete, signor di Ceprano?

          1 Reply Last reply
          0
          Reply
          • Reply as topic
          Log in to reply
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes


          • Login

          • Don't have an account? Register

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • World
          • Users
          • Groups