declaring an array problem November 08, 2010 01:37AM | Registered: 14 years ago Posts: 444 |
Re: declaring an array problem November 08, 2010 02:10AM | Registered: 14 years ago Posts: 234 |
Re: declaring an array problem November 08, 2010 03:46AM | Registered: 14 years ago Posts: 444 |
ftImage *levelNumTxt = (ftImage*) malloc(12*sizeof(ftImage)); for(i=0;i<20;i++){ levelNumTxt = ftImage(640,480); }but, now when I call the code
levelNumTxt.setFont(hyperspd_ttf, hyperspd_ttf_size);The wii just freezes at a black screen and dolphin complains about compiling at point 0. There isn't any extra warning that come with this line. This only happens for this call. All of the other function calls work. such as:
levelNumTxt.setSize(50);I know that hyperspd_ttf, and hyperspd_ttf_size are correct. could the problem be in my initialization of levelNumTxt?
Re: declaring an array problem November 08, 2010 05:45AM | Registered: 13 years ago Posts: 40 |
Re: declaring an array problem November 08, 2010 05:57AM | Registered: 14 years ago Posts: 444 |
Re: declaring an array problem November 08, 2010 09:47AM | Registered: 13 years ago Posts: 379 |
levelNumTxt = ftImage(640,480);Might create a new object "ftImage" and then uses the copy constructor, or assign operator to put that in levelNumTxt. But after that the orginal tfImage gets destroyed.
class tfImage { private: tfImage(const tfImage& other) { /* this should never run, trigger some kind of error? */ } tfImage& operator = (const tfImage& other) { /* this should never run, trigger some kind of error? */ } ...Because the copy constructor and assign operator are private then, the context in which they are allowed to be used is very limited. And most likely your code will no longer compile. Which is a good thing ;-)
Re: declaring an array problem November 08, 2010 03:13PM | Registered: 13 years ago Posts: 686 |
Re: declaring an array problem November 08, 2010 08:28PM | Registered: 13 years ago Posts: 40 |
levelNumTxt = ftImage(640,480);
private: ftImage& operator=(const ftImage& other);
ftImage *levelNumTxt = (ftImage*) malloc(12*sizeof(ftImage)); for(i=0;i<12;i++){ new (levelNumTxt + i) ftImage(640,480); }
ftImage levelNumTxt[12]; for(i=0;i<12;i++){ levelNumTxt.SetWidthHeight(640,480); }
#include < vector > using std::vector; vector< ftImage > levelNumTxt(12, ftImage(640,480));
Re: declaring an array problem November 09, 2010 06:46AM | Registered: 14 years ago Posts: 444 |
levelNumTxt.setFont(hyperspd_ttf, hyperspd_ttf_size);the code still doesn't run on my wii, and dolphin gives me an error.
std::vector< ftImage > levelNumTxt(12, ftImage(640,480)); for(i=0;i<totalLevels||i<12;i++){ levelNumTxt.setFont(hyperspd_ttf, hyperspd_ttf_size); <- If this line is commented out the code runs levelNumTxt.setSize(50); levelNumTxt.setColor(Color::Color(0,0,0)); levelNumTxtSpr.SetPosition(100+floor(i/3)*114,100+(i%3)*133); levelNumTxtSpr.SetImage(&levelNumTxt); sprintf(temp,"%d",i); levelNumTxt.printf(temp); manager.Append(&levelNumTxtSpr); }here is the exact error that dolphin gives:
ERROR: Trying to compile at 0. LR=80008b04I hit OK and:
iCacheJIT: Reading Opcode from fffffffc. Please report.When I hit ok then dolphin crashes. When the code is run on the wii, nothing is displayed after a while, so I assume that there is an error.
Re: declaring an array problem November 09, 2010 09:07AM | Registered: 13 years ago Posts: 40 |
Re: declaring an array problem November 09, 2010 12:34PM | Registered: 13 years ago Posts: 379 |
ftImage **levelNumTxt = (ftImage**) malloc(12*sizeof(ftImage*)); for(i=0;i<20;i++){ levelNumTxt = new ftImage(640,480); levelNumTxt->setColor(Color::Color(0,0,0)); }
Re: declaring an array problem November 09, 2010 08:37PM | Registered: 13 years ago Posts: 40 |
Re: declaring an array problem November 10, 2010 12:04AM | Registered: 14 years ago Posts: 444 |
ftImage **levelNumTxt = (ftImage**) malloc(12*sizeof(ftImage)); for(i=0;iI get the same results with that line in, except, now dolphin gives me about ten READ errors in consecuative addresses, and then there are about four WRITE errors. After this dolphin crashes.= new ftImage(640,480); } for(i=0;i<totalLevels||i<12;i++){ levelNumTxt->setFont(hyperspd_ttf, hyperspd_ttf_size); <-This line still causes problems levelNumTxt->setSize(50); levelNumTxt->setColor(Color::Color(0,0,0)); levelNumTxtSpr.SetPosition(100+floor(i/3)*114,100+(i%3)*133); levelNumTxtSpr.SetImage(levelNumTxt); sprintf(temp,"%d",i); levelNumTxt->printf(temp); manager.Append(&levelNumTxtSpr); }
#pragma once #include "rgbaImage.h" #include set using std::set; class ftImage : public rgbaImage { public: class position { public: position(unsigned int x,unsigned int y); unsigned int x,y; bool operator <(const position &p2) const; }; ftImage(const unsigned int width, const unsigned int height); ~ftImage(void); void setSize(int s); void setColor(Color c); void setFont(const u8 *fontbuf, const u32 fontsize); void printf(const char *fmt, ...); void clear(const pixel &p); void clear(); void reset(); void operator~(void); void flush(void); private: int _width, _height; //used by flood fill void tryToAdd(set&open,bool *closed,const pixel &p,signed int xOffset,signed int yOffset,const position &pos); };
Re: declaring an array problem November 10, 2010 05:39AM | Registered: 13 years ago Posts: 40 |
ftImage **levelNumTxt = (ftImage**) malloc(12*sizeof(ftImage));
ftImage **levelNumTxt = (ftImage**) malloc(12*sizeof(ftImage*));
levelNumTxt = new ftImage(640,480);
ftImage *levelNumTxt[12]; // array of the 12 pointers
Re: declaring an array problem November 10, 2010 06:12AM | Registered: 14 years ago Posts: 444 |
ftImage **levelNumTxt = (ftImage**) malloc(totalLevels*sizeof(ftImage*)); for(i=0;i<totalLevels;i++){ levelNumTxt = new ftImage(640,480); }
Re: declaring an array problem November 10, 2010 09:22AM | Registered: 13 years ago Posts: 40 |
levelNumTxt.setFont(hyperspd_ttf, hyperspd_ttf_size);stopped working AFTER you started using dynamic memory allocation. It appears we have to reevaluate that predicate.
ftImage test1(640,480); test1.setFont(hyperspd_ttf, hyperspd_ttf_size);
ftImage test1(640,480); test1.setFont(hyperspd_ttf, hyperspd_ttf_size); ftImage test2(640,480); test2.setFont(hyperspd_ttf, hyperspd_ttf_size);
Re: declaring an array problem November 10, 2010 03:19PM | Registered: 14 years ago Posts: 444 |
ftImage *levelNumTxt[5] = {new ftImage(640,480)};What this should do is create an array of pointers to ftImages right? Then it should assign the first pointer to a new ftImage.
Re: declaring an array problem November 10, 2010 08:04PM | Registered: 13 years ago Posts: 40 |
Quote
g_man
What this should do is create an array of pointers to ftImages right? Then it should assign the first pointer to a new ftImage.
static const int totalLevels = 12; char buffer[totalLevels * sizeof(ftImage)]; // statically allocate memory for 12 ftImage objects ftImage * const levelNumTxt = (ftImage *)buffer; // convenience pointer, treat as array int main() { // initialize the array memory ftImage *pImg = levelNumTxt; for (int i = 0; i < totalLevels; ++i, ++pImg) { new (pImg) ftImage(640,480); // placement new pImg->setFont(hyperspd_ttf, hyperspd_ttf_size); ... // more initialization here } ... // random access levelNumTxt[2].setColor(Color::Color(0,0,0)); }
Re: declaring an array problem November 11, 2010 12:23AM | Registered: 14 years ago Posts: 444 |
int totalLevels =5; int i; char temp[5]; char buffer[totalLevels * sizeof(ftImage)]; ftImage *const levelNumTxt = (ftImage *)buffer; Sprite levelNumTxtSpr[12]; ftImage *pImg = levelNumTxt; for(i=0;i < totalLevels;i++,pImg++){ new (pImg) ftImage(640,480); pImg->setFont(hyperspd_ttf,hyperspd_ttf_size); pImg->setSize(50); pImg->setColor(Color::Color(0,0,0)); sprintf(temp,"%d",i); pImg->printf("1"); levelNumTxtSpr.SetPosition(100+floor(i/3)*114,100+(i%3)*133); levelNumTxtSpr.SetImage(&levelNumTxt); manager.Append(&levelNumTxtSpr); } while(1){ for(i=0;i < totalLevels&&i < 12;i++){ levelNumTxt.printf("1"); levelNumTxt.flush(); } // levelNumTextSpr[0].Draw(); manager.Draw(0,0); for(i=0;i < totalLevels&&i < 12;i++){ levelNumTxt.clear(); levelNumTxt.reset(); } gwd->Flush(); }
Re: declaring an array problem November 11, 2010 03:56AM | Registered: 13 years ago Posts: 40 |