SDL奇怪的行为,为我提供了这样的结构:C++:中`new`
typedef struct SDL_Rect {
Sint16 x, y;
Uint16 w, h;
} SDL_Rect;
我想在堆上创建作为类变量新SDL_Rect
:
// Forward declaration
private:
SDL_Rect *m_pcScreenRect;
并在构造函数我做到这一点:
/* Screen Rectangle (for clearing) */
m_pcScreenRect = new SDL_Rect;
m_pcScreenRect->x = 0;
m_pcScreenRect->y = 0;
m_pcScreenRect->w = 800;
m_pcScreenRect->h = 600;
printf("Rect(x:%d, y:%d, w:%d, h:%d)\n", m_pcScreenRect->x, m_pcScreenRect->y, m_pcScreenRect->w, m_pcScreenRect->h);
它打印Rect(x:0, y:0, w:800, h:600)
所以这是正确的。
问题1
但是,当我不初始化x
和y
,它打印垃圾号码,如:
Rect(x:-11280, y:63, w:800, h:600)
Rect(x:25584, y:167, w:800, h:600)
Rect(x:-11280, y:40, w:800, h:600)
// This is just, run, terminate, run, terminate, ....
而且我认为对于一个int的默认值是0
?
问题2
在我gameloop,我有同样的线路检查SDL_Rect的值。在循环我得到的结果是这样的:
Clear (x:0, y:40, w:0, h:560)
Clear (x:0, y:99, w:0, h:501)
Clear (x:0, y:55, w:0, h:545)
Clear (x:0, y:55, w:0, h:545)
// Again: run, terminate, run, terminate....
当我的构造是这样的:
/* Screen Rectangle (for clearing) */
m_pcScreenRect = new SDL_Rect;
//m_pcScreenRect->x = 0;
//m_pcScreenRect->y = 0;
m_pcScreenRect->w = 800;
m_pcScreenRect->h = 600;
我得到正常的结果时,我去掉了两行:
/* Screen Rectangle (for clearing) */
m_pcScreenRect = new SDL_Rect;
m_pcScreenRect->x = 0;
m_pcScreenRect->y = 0;
m_pcScreenRect->w = 800;
m_pcScreenRect->h = 600;
这个问题是否与new
或数据类型(Uint16和一个正常的int)有关。如果是数据类型,该如何解决?
非常感谢!(哈哈!)
谢谢,
任何帮助将不胜感激!
额外的问题:
我要在C中定义我的所有变量++。
但随机数字从哪里来?
我在Linux中使用g++
和gcc
。
随机数字来自新变量分配给的内存位置。他们之前获得了这个地点的任何价值。简单的例子:如果你分配一个100字节的数组,给它们分配一些值,释放它并且分配一个25个整数的数组(4个字节的整数是准确的),它们可能(取决于很多因素)每个得到4个先前分配的100个字节的字节,并取出这些字节在释放时的值。如果前4个字节是0x00010203,则生成的整数将为66051,否则直接进行初始化。 – dbemerlin 2010-06-22 12:13:15