Hi all,
can any one tell me how to get off of this mailing list?
regards
Sean
John Zoidberg <zohn.joidberg_at_gmail.com> escribió: And why does it not happen in programs compiled with gcc/g++? What's the exact stack size of ROOT?
I used static allocation on purpose since it usually causes less problems than dynamic allocation. I guess I was wrong. ^^'
On 7/9/07, Victor Perevoztchikov <perev_at_bnl.gov> wrote: Hi John,
sure it is related to stack size. When it is not compiled, then this array created by new.
If you will do instead of
char a[MAX];
char *a = new char[MAX];
and at the end delete [] a
it will work allways correctly
Victor
Victor M. Perevoztchikov perev_at_bnl.gov Brookhaven National Laboratory MS 510A PO Box 5000 Upton NY 11973-5000 tel office : 631-344-7894; fax 631-344-4206;
I've encountered a strange problem in one of my macros. I managed to reduce it to an array size problem.
This macro runs without errors when compiled (.L toto.C+) with "#define MAX 1972432" and exits root without any message if compiled with "#define MAX 1972433":
//includes
#include <iostream>
using namespace std;
//OK
#define MAX 1972432
//not OK
//#define MAX 1972433
//main function
int toto()
{
char a[MAX];
cout<<"MAX="<<MAX<<endl; cout<<"total size="<<MAX*sizeof(char)<<" bytes"<<endl; cout<<"total size="<<(float)MAX*(float)sizeof(char)/1024.<<" Kilobytes"<<endl;cout<<"total size="<<(float)MAX*(float)sizeof(char)/(1024.*1024.)<<" Megabytes"<<endl; cout<<"total size="<<MAX*sizeof(char)*8<<" bits"<<endl;
return(0);
}
You might have to change the limit values of MAX to see this problem on your PC. I noticed that it's quite random sometimes. Sometimes it worked with 1972432 and sometimes not. I also recommend quitting and restarting ROOT after each test because it seems to always work if you stay in the ROOT shell even after recompiling.
Other tests I made:
This macro runs without error when not compiled (.x toto2.C):
//includes
#include <iostream>
using namespace std;
//OK
#define MAX 10000000
//not OK
//#define MAX 1972433
//main function
int toto2()
{
char a[MAX];
cout<<"MAX="<<MAX<<endl; cout<<"total size="<<MAX*sizeof(char)<<" bytes"<<endl; cout<<"total size="<<(float)MAX*(float)sizeof(char)/1024.<<" Kilobytes"<<endl;cout<<"total size="<<(float)MAX*(float)sizeof(char)/(1024.*1024.)<<" Megabytes"<<endl; cout<<"total size="<<MAX*sizeof(char)*8<<" bits"<<endl;
return(0);
}
This C++ program compiles and runs without error:
//includes
#include <iostream>
using namespace std;
//OK
#define MAX 10000000
//not OK
//#define MAX 1972433
//main function
int main()
{
char a[MAX];
cout<<"MAX="<<MAX<<endl; cout<<"total size="<<MAX*sizeof(char)<<" bytes"<<endl; cout<<"total size="<<(float)MAX*(float)sizeof(char)/1024.<<" Kilobytes"<<endl;cout<<"total size="<<(float)MAX*(float)sizeof(char)/(1024.*1024.)<<" Megabytes"<<endl; cout<<"total size="<<MAX*sizeof(char)*8<<" bits"<<endl;
return(0);
}
So, is there any rational explanation to this? Should I use TCloneArrays or TNtuples instead?
LLama Gratis a cualquier PC del Mundo.
Llamadas a fijos y móviles desde 1 céntimo por minuto.
http://es.voice.yahoo.com
Received on Tue Jul 10 2007 - 17:12:32 CEST
This archive was generated by hypermail 2.2.0 : Wed Jul 11 2007 - 11:50:02 CEST