Classes, NFC and memory leak

Hi.

Pretty much new to C/Arduino, and I want to implement a object oriented model for my project. I do however have memory leak problems.

I am experiencing leaks when using listen() in the class structure below, while I do not when using listen() outside the class. Could anyone help me shed light on why?

#include <Wire.h>
#include <Adafruit_NFCShield_I2C.h>
#include <MemoryFree.h>

#define IRQ     (2)
#define RESET   (3)

Adafruit_NFCShield_I2C nfc(IRQ, RESET);

uint8_t uid[] = {0, 0, 0, 0, 0, 0, 0}; // Buffer to store the returned UID
uint8_t uidLength; // Length of the UID


class Controller 
{
  public:
    Controller() {}
    
    virtual void listen() {
      if (nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength)) { 
         Serial.println(freeMemory());
         
         this->listen();
      }
    }
};


void listen() {
  if (nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength)) { 
     Serial.println(freeMemory());
     
     listen();
  } 
}

void setup() {
  Serial.begin(9600);
  nfc.begin();
  nfc.SAMConfig();
      
  // Cuases memory leak
  Controller *ctrl = new Controller(); 
  ctrl->listen();
  
  // Does not cause memory leak
  //listen();
}

void loop() {}

Why does listen() call listen()?

The function is intended to do something with the NFC tag data, then return to listen()

Recursive calls are bad JuJu when you are RAM limited.