I am relatively new in C++ and didn't expect the behavior shown in code below. Can you, please, advise why is it happening and how to fix it?
DataWrapper.h
#pragma once
class DataWrapper
{
public:
    int myVal;
    DataWrapper();
};
DataWrapper.cpp
#include "DataWrapper.h"
DataWrapper::DataWrapper()
{
    myVal = 1;
}
DataCaller.h
#pragma once
#include "DataWrapper.h"
class DataCaller
{
public:
    DataWrapper* dwRef;
    DataCaller();
    void PrintData();
};
DataCaller.cpp
#include "DataCaller.h"
#include <iostream>
DataCaller::DataCaller()
{
    dwRef = &DataWrapper();
    int extractedVal = dwRef->myVal;
    int dwAddr = (int)dwRef;
    std::cout << "Val In DataCaller Constructor: "<< extractedVal << " dwAddr: " << dwAddr << std::endl;
}
void DataCaller::PrintData()
{
    int extractedVal = dwRef->myVal;
    int dwAddr = (int)dwRef;
    std::cout << "Val In DataCaller PrintData: " << extractedVal << " dwAddr: " << dwAddr << std::endl;
}
Main.cpp
#include <post-processing/DataCaller.h>
int main(int argc, char* argv[])
{
    DataCaller dc = DataCaller();
    dc.PrintData();
    return 0;
}
So I fill the value in DataWrapper constructor , in DataCaller constructor I create DataWrapper pointer, then print DataWrapper pointer's value. I also print this value in regular method of DataCaller class.
When I print it in constructor, it is equal to 1, as written in DataWrapper constructor, but when I print it in DataCaller method - the value is set to rubbish. At the same time "dwAddr" is the same in both cases. Here is an example of my output:
Val In DataCaller Constructor: 1 dwAddr: 2035349268
Val In DataCaller PrintData: -858993460 dwAddr: 2035349268
Can you, please, advise why is it happening and how to fix it?
 
    