Problem interfacing SoftwareSerial and OneWire

I am working on a project that involves the use of a DS2401+ silicon serial and an MP3 module, namely the DFRobot DFPlayer Mini SKU:DFR0299. Since the project is targeted at the Arduino Pro Mini 3.3V I am using the OneWire library to communicate with the silicon serial and the SoftwareSerial combined with DFPlayer Mini Fast libraries for the MP3 module. The problem that I run into is that after reading the serial number from the DS2401 an attempt to communicate with the MP3 module leads to the board resetting.

I doubt the problem is due to improper electrical connections as it is also present when loaded to a Mega 2560 with nothing connected. I have been sitting on this for a few days now. I have thought about some possible causes to this problem, but so far nothing I have already thrown at the program seems to fix it. The problem also occurs with the MP3 module manufacturer’s library.

In the full version of the program I am developing(the code below is just the minimal snippet that I found still reproduces the problem), a specific combination of delay() and Serial.print() functions placed in different parts of the code, somehow caused the program to work flawlessly, without reboots.

I would highly prefer to get it to work in a clean way, but at this point I fell like I need some sort of a hint.
main.cpp

#include "DS2401.h"
#include "DFPlayerMini_Fast.h"
#include <SoftwareSerial.h>
#include <string.h>
/* MP3 FILES DEFINITIONS */
#define RADIO_NOISE (4) 
/* PIN DEFINITIONS */
#define ARDUINO_TX_PIN (11) 
#define ARDUINO_RX_PIN (10) 
#define ARDUINO_DS2401_PIN (7)
/* SOFTWARE SERIAL DEFINITIONS */
#define SSERIAL_BAUDRATE 9600
bool isCorrectDS2401Connected(const byte* correctSignature);
const byte CORRECT_DS2401[8] = {0x01,0x0B,0xB7,0xFE,0x1A,0x00,0x00,0x9F}; 
DFPlayerMini_Fast soundPlayer;
DS2401 * ds2401 = NULL;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.println("Rebooting...");
  SoftwareSerial softSerial(ARDUINO_RX_PIN,ARDUINO_TX_PIN);
  softSerial.begin(SSERIAL_BAUDRATE);
  soundPlayer.begin(softSerial);
  ds2401 = new DS2401(ARDUINO_DS2401_PIN);
  soundPlayer.loop(RADIO_NOISE);
  soundPlayer.pause();
}

void loop() {
  if(isCorrectDS2401Connected(CORRECT_DS2401))
  {
    Serial.println("OK");
    soundPlayer.resume(); 
  }
  else
  {
    Serial.println("Wrong");
    soundPlayer.pause();
  }

}
bool isCorrectDS2401Connected(const  byte* correctSignature)
{
  byte data[8];
  uint8_t result = ds2401->readData(data);
  uint8_t comparisonResult = 1;
  if(result == RESULT_SUCCESS)
  {
    comparisonResult = memcmp(data,correctSignature,8*sizeof(byte));
    if(comparisonResult == 0)
      return true;
    else
      return false; 
  }
  else
    return false; // if DS2401 is not found return false.
}

DS2401.h

#ifndef ARDUINO_H
#define ARDUINO_H
#include "Arduino.h"
#endif
#define READ_COMMAND (0x33)
#define RESULT_FAILURE 1
#define RESULT_SUCCESS 0
#define RESULT_FAIL_CRC 2
#define RESULT_NOPOINTER 3
#define VERIFY_CRC false
#include <OneWire.h>
class DS2401 {
  private:
  OneWire * onewire;
  public:
  DS2401(int dataPin);
  uint8_t readData(volatile byte* data);
};

DS2401.cpp

#include "DS2401.h"
DS2401::DS2401(int dataPin)
{
  this->onewire = new OneWire(dataPin);
}
uint8_t DS2401::readData(volatile byte * data)
{
  if(!data)
    return RESULT_NOPOINTER;
  if(onewire->reset())
  {
    onewire->write(READ_COMMAND,1);
    for(volatile int i = 0; i<8; i++)
    {
      data[i] = (volatile byte)onewire->read();
    }
    #if VERIFY_CRC == true
    if(data[7]== OneWire::crc8(data,7))
      return RESULT_SUCCESS;
    else
      return RESULT_FAIL_CRC;
    #else
    return RESULT_SUCCESS;
    #endif
  }
  return RESULT_FAILURE;
}
  SoftwareSerial softSerial(ARDUINO_RX_PIN,ARDUINO_TX_PIN);
  softSerial.begin(SSERIAL_BAUDRATE);
  soundPlayer.begin(softSerial);

That SoftwareSerial instance will go out of scope when setup() ends. Trying to use that instance later will not work.

That's the first thing you need to fix. After that, if problems persist, post the revised code, and describe what the problems are.

Yeah that was probably it. Thank you.