Starting sequence with start()

I hope you are doing well Tudor Timi,

As far as I know, start() method calls body() method. If there is no body() method but I call it from user task, I get the null error message.

class virtual_seq extends uvm_sequence #(seq_item);
  core_A_seq Aseq;
  core_B_seq Bseq;  
  
  core_A_sequencer seqr_A;
  core_B_sequencer seqr_B;
  `uvm_object_utils(virtual_seq)
  `uvm_declare_p_sequencer(virtual_sequencer)
  
  function new (string name = "virtual_seq");
    super.new(name);
  endfunction

  task my_task();
    `uvm_info(get_type_name(), "virtual_seq: Inside Body", UVM_LOW);
    Aseq = core_A_seq::type_id::create("Aseq");
    Bseq = core_B_seq::type_id::create("Bseq");
    
    Aseq.start(p_sequencer.seqr_A);
    Bseq.start(p_sequencer.seqr_B);
  endtask
endclass

After execute, I faced a NULL Pointer Error

xmsim: *E,TRNULLID: NULL pointer dereference.
          File: ./sequence.sv, line = 69, pos = 25
         Scope: worklib.$unit_0x4ccdf83b::virtual_seq@4292_23.my_task
          Time: 0 FS + 44

I confused that p_sequencer is declared in `uvm_declare_p_sequencer(virtual_sequencer) so I can expected I can start the sequence in the task my_task().

But I don’t know why I got Null Pointer Error interms of p_sequencer. What is the difference is between the way the sequence starts running and why p_sequencer makes a Null Pointer Error?
For your understand I compose it With Virtual Sequnce & virtual sequecer (p_seq(1) - EDA Playground

Because p_sequencer only gets set if you execute a sequence using start(). In your example code you’re just creating an instance of virtual_seq and calling my_task() on it.