Fatal in <CustomReAlloc2>....

From: FABIOR@FNALD.FNAL.GOV
Date: Fri Sep 04 1998 - 16:27:23 MEST


Hi Rooters!
I want to use ROOT classes from a java program, with "native" calls to C++. I
could do this in some simple applications, but now i have a problem. I'm not
albe to write to a file. I've copied a ROOT tutorial, which is a macro, in my
native function with very few changes. The runtime error i get shouldn't be a
consequence of Java stuff, but probably it is: doing the same things in a C++
main() everything is fine. The error is:

TFile Writing Name=hsimple.root Title=
CustomReAlloc2: oldsize != size
Fatal in <CustomReAlloc2>: unreasonable size (1169)
aborting
*** Error code 134 (bu21)
Java source:

public class First {
  public native void callRoot();
  static {
     System.loadLibrary("first");
  }
  public static void main(String[] args) {
    new First().callRoot();
  }
}
 C++ source:

#include "TROOT.h"
#include "TObject.h"
#include "TApplication.h"
#include "TCanvas.h"
#include "TLine.h"
#include "TPaveLabel.h"
#include "TFile.h"
#include "TH1.h"
#include "TH2.h"
#include "TProfile.h"
#include "TNtuple.h"
#include "TRandom.h"
#include "First.h"
#include "stdio.h"
#include "stdlib.h"


extern void InitGui();
VoidFuncPtr_t initfuncs[] = { InitGui, 0 };
int Error;  // needed by Motif

TROOT root("prova","Prova", initfuncs);

void Java_First_callRoot(JNIEnv *env, jobject obj) {
   int * argc= new int;
   *argc=1;
   char** argv=new char*;
   *argv="app";
   TApplication theApp("App",argc,argv);
   TCanvas *c1 = new TCanvas("c1","Dynamic Filling Example",200,10,700,500);
   c1->SetFillColor(42);
   c1->GetFrame()->SetFillColor(21);
   c1->GetFrame()->SetBorderSize(6);
   c1->GetFrame()->SetBorderMode(-1);
   TFile* hfile = new TFile("hsimple.root","RECREATE"); 
  
// Create some histograms, a profile histogram and an ntuple
   TH1F *hpx    = new TH1F("hpx","This is the px distribution",50,-4,4);
   TH2F *hpxpy  = new TH2F("hpxpy","py vs px",40,-4,4,40,-4,4);
   TProfile *hprof = new TProfile("hprof","Profile of pz versus
px",100,-4,4,0,20);
   TNtuple *ntuple = new TNtuple("ntuple","Demo ntuple","px:py:pz:random:i");

//  Set canvas/frame attributes (save old attributes)
   hpx->SetFillColor(48);
// Fill histograms randomly
   gRandom->SetSeed();
   Float_t px, py, pz;
   const Int_t kUPDATE = 1000;
   for ( Int_t i=0; i<25000; i++) {
      gRandom->Rannor(px,py);
      pz = px*px + py*py;
      Float_t random = gRandom->Rndm(1);
      hpx->Fill(px);
      hpxpy->Fill(px,py);
      hprof->Fill(px,pz);
      ntuple->Fill(px,py,pz,random,i);
      if (!i%kUPDATE) {
        if (i == kUPDATE) hpx->Draw();
         c1->Modified();
        c1->Update();
      }
   }

// Save all objects in this file  
   hpx->SetFillColor(0);
   hfile->Write(); 
   hpx->SetFillColor(48);
   theApp.Run();
   return;
}
 



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:37 MET