手机操盘手免费体验火热进行
20万人已抢先免费使用
624MHz CPU极速智能HKC G920震憾登场
夏新智能手机专区
主流智能手机音乐播放软件横向评测 最新手机电影
发新话题
打印

[编程] 写出来的程序会Fatal Exception希望DX指点!

写出来的程序会Fatal Exception希望DX指点!

#include #include "TicTacToe.h" #define MainForm 1000 #define MainGadget 1000 struct boxNumber { Int16 ordinal; Int16 x; Int16 y; }; static Boolean appHandleEvent (EventPtr pEvent); static void mainFormInit (FormPtr pForm); static Boolean mainFormEventHandler (EventPtr pEvent); static Boolean doMainMenu (FormPtr pForm, UInt16 command); static void startApp() {return;} static void stopApp() {return;} static void* getobjectPtr(FormPtr pForm, Int16 resourceNo); static void TicTacToeDraw(FormPtr pForm,UInt16 gadgetID); static void TicTacToeTap(FormPtr pForm,UInt16 gadgetID,EventPtr pEvent); static struct boxNumber getBoxWithPen(RectangleType bounds,Int16 boxWidth,Int16 x,Int16 y); static void getBoundsOfBox(Int16 boxWidth,struct boxNumber boxN , RectangleType *bounds , RectangleType *box); static Boolean mainFormEventHandler(EventPtr pEvent) { UInt8* dataP; Boolean handled = false; FormPtr pForm = FrmGetActiveForm(); UInt16 gadgetIndex = FrmGetobjectIndex(pForm,MainGadget); RectangleType bounds; switch (pEvent->eType) { case frmOpenEvent: FrmDrawForm(pForm); mainFormInit(pForm); TicTacToeDraw(pForm,MainGadget); handled = true; break; case frmCloseEvent: dataP = FrmGetGadgetData(pForm, FrmGetobjectIndex(pForm, MainGadget)); if (dataP!=0) {MemPtrFree(dataP); } break; case penDownEvent: FrmGetobjectBounds(pForm,gadgetIndex,&bounds); if( RctPtInRectangle(pEvent->screenX,pEvent->screenY,&bounds) ) { TicTacToeTap(pForm,MainGadget,pEvent); handled = true; } break; default: break; } return handled; } static void mainFormInit (FormPtr pForm) { void *dataP; void* temp; dataP = MemPtrNew(9*sizeof(UInt8)) ; temp = dataP; if(dataP) { MemSet(dataP,9*sizeof(UInt8),1); FrmSetGadgetData(pForm,FrmGetobjectIndex(pForm,MainGadget),dataP); } } void* getobjectPtr (FormPtr pForm, Int16 resourceNo) { UInt16 objIndex=FrmGetobjectIndex(pForm,resourceNo); return FrmGetobjectPtr(pForm,objIndex); } static void TicTacToeDraw(FormPtr pForm,UInt16 gadgetID) { RectangleType bounds; UInt16 gadgetIndex = FrmGetobjectIndex(pForm,gadgetID); UInt8* dataP = FrmGetGadgetData(pForm,gadgetIndex); UInt8 i,Xadd,Yadd,temp; // WinDrawChars("TicTacToeDraw Init...",StrLen("TicTacToeDraw Init..."),20,20); if(dataP) { FrmGetobjectBounds(pForm,gadgetIndex,&bounds); WinEraseRectangle(&bounds,0); WinDrawRectangleFrame(rectangleFrame,&bounds); WinDrawLine(bounds.topLeft.x,bounds.topLeft.y+30, bounds.topLeft.x+91,bounds.topLeft.y+30); WinDrawLine(bounds.topLeft.x,bounds.topLeft.y+61, bounds.topLeft.x+91,bounds.topLeft.y+61); WinDrawLine(bounds.topLeft.x+30,bounds.topLeft.y, bounds.topLeft.x+30,bounds.topLeft.y+91); WinDrawLine(bounds.topLeft.x+61,bounds.topLeft.y, bounds.topLeft.x+61,bounds.topLeft.y+91); // WinDrawChars("DrawFrame OK",StrLen("DrawFrame OK"),20,20); Xadd = 0 ; Yadd = 0 ; for(i=0;i<9;i++) { temp =*(dataP+i*sizeof(UInt8)); switch(temp) { case 0: WinDrawChars("?",1,bounds.topLeft.x+12+Xadd*31,bounds.topLeft.y+10+Yadd*31); break; case 1: WinDrawChars("X",1,bounds.topLeft.x+12+Xadd*31,bounds.topLeft.y+10+Yadd*31); break; case 2: WinDrawChars("O",1,bounds.topLeft.x+12+Xadd*31,bounds.topLeft.y+10+Yadd*31); break; break; default: break; } if(++Xadd > 2) { Xadd = 0; Yadd++; } } } WinDrawChars("TTTDraw OK",StrLen("TTTDraw OK"),20,20); } static void TicTacToeTap(FormPtr pForm,UInt16 gadgetID,EventPtr pEvent) { UInt16 gadgetIndex = FrmGetobjectIndex(pForm,gadgetID); UInt8* dataP=FrmGetGadgetData(pForm,gadgetIndex); UInt8* dataPB; if(dataP!=0) { RectangleType bou
Treo650+TT5+Wireless Keyboard+Sanisk+Kingston+AData
里面AppHandleEvent等等全部是样板,就不发了……超长了

Treo650+TT5+Wireless Keyboard+Sanisk+Kingston+AData
Crash一般都是由于指针指向错误引起的,检查检查里面用到的指针吧。

web:www.yzqsoft.com(失效...)
My Palm Products
[CoolDAs][FontHackV][SafeHackV][ZLPluginLunarClock]
用CodeWarrior里面的debug,步步为营,看到底是在哪个地方出了错误。

我是菜鸟,也遇到类似问题。
问一下,这里
UInt8* dataP;
……
dataP = FrmGetGadgetData(pForm, FrmGetobjectIndex(pForm, MainGadget));
if (dataP!=0)
dataP不是一个指针吗?这里可以这样写么?


强贴留名
发新话题