I am adding the header file and cpp file (it has main fucntion).
AuctionPrices.h
#ifndef AuctionPrices_h
#define AuctionPrices_h      
/*
 *
 * class AuctionPrices - maintains Buy Order, Sell Order books
 */
#include <bits/stdc++.h> 
#include <map>
//#pragma pack(1)
struct Order 
{
    char * itemId;
    char * auctionId;
    int Side;
};
 
class AuctionPrices 
        {
     public:
         virtual int AddNewOrder(char *itemId, char *auctionId, int Side, int Price) = 0;
             virtual int DeleteOrder(char *itemId, char *auctionId) = 0;
   
             virtual int Print() = 0;
        };
class AuctionPrice_Imp : public AuctionPrices 
    {
    public:
        AuctionPrice_Imp();
        
        ~AuctionPrice_Imp();
        std::map <int, Order, std::greater< int >> BuyMap;
        std::map <int, Order, std::less< int >> SellMap;
        int AddNewOrder(char *itemId, char *auctionId, int Side, int Price);
        int DeleteOrder(char *itemId, char *auctionId);
        int Print();
    };
#endif
AuctionPrices_Imp.cpp
/** 
  * Auction Price Class implementation
  * Constructor, AddNewOrder, DeleteOrder, Print 
  *
  */
#include <bits/stdc++.h> 
#include <map>
#include "AuctionPrices.h"
using namespace std;
AuctionPrice_Imp::AuctionPrice_Imp()
{
}
AuctionPrice_Imp::~AuctionPrice_Imp()
{
}
int AuctionPrice_Imp::AddNewOrder(char *itemId, char *auctionId, int Side, int Price)
{
    Order order;
    memcpy(order.itemId, itemId, strlen(itemId)+1);
    memcpy(order.auctionId, auctionId, strlen(auctionId)+1);
    order.Side = Side;
    if (Side == 1)
    {   
        BuyMap.insert (std::pair<int,Order>(Price,order));
        //buyLevels_.insert( std::pair< OfPrice, Level< OrderEntry > >( price, buyLevel ) );
    }
    else if (Side == 2)
    {
        SellMap.insert (std::pair<int,Order>(Price,order));
    }
    else 
{
    return 0;
}
    
return 1;
}
int AuctionPrice_Imp::DeleteOrder(char *itemId, char *auctionId)
{
    
    return 0;
}
int AuctionPrice_Imp::Print()
{
    std::map <int,Order,std::greater< int >>::iterator buy_it;
    std::map <int,Order,std::less< int >>::iterator sell_it;
    // Print Sell Map
    for ( sell_it = SellMap.begin();sell_it != SellMap.end(); sell_it++)
    {
        std::cout << sell_it->first << '\t' << std::endl;
    }   
    // Print Buy Map
    for ( buy_it = BuyMap.begin();buy_it != BuyMap.end(); buy_it++)
    {
        std::cout << buy_it->first << '\t' << std::endl;
    }   
    
    return 1;
}
int main()
{
    AuctionPrice_Imp * auctionPrice_Imp = new AuctionPrice_Imp();
    
    /*
    AddNewOrder(“item1”, “auction1”, 1, 100)
    AddNewOrder(“item1”, “auction2”, 1, 101)
    AddNewOrder(“item2”, “order3”, 1, 99)
    AddNewOrder(“item2”, “order4”, 2, 100)
    
    */
    
    auctionPrice_Imp->AddNewOrder("item1", "auction1", 1, 100);
    auctionPrice_Imp->AddNewOrder("item1", "auction2", 1, 101);
    auctionPrice_Imp->AddNewOrder("item2", "order3", 1, 99);
    auctionPrice_Imp->AddNewOrder("item2", "order4", 2, 100);
    
    auctionPrice_Imp->Print();
}
When I am running the code its giving segmentation fault at the line:
memcpy(order.auctionId, auctionId, strlen(auctionId)+1);
Please anyone can help or correct the code. The functions I am calling are supposed to add the orders to the Maps: BuyMap and SellMap. Once they have added to those map, I am using a print function to print the values.
 
     
     
    