静态结构体数组赋值引起的问题
Map.h
struct tagOneBigMap{
int bigMapTypeID ; //大地图类型
int bigMapLogicStartX ; //大地图起始位置
int bigMapLogicStartY ;
int bigMapWidth ;
int OneLongMapID ; //单一长地图ID
};
typedef struct tagOneBigMap OneBigMap;
class Maps {
public:
static int nowMaps[7]; //当前生成的地图组合
static const int ONE_BIG_MAPS_LENGTH = 7;
static OneBigMap oneBigMaps[7] ;
/*****************************
构造函数
*****************************/
Maps(){
}
/*****************************
解造函数
*****************************/
~Maps(){
}
/*****************************
初始化底图数据
*****************************/
void initMapData(){
for(int i = 0; i < ONE_BIG_MAPS_LENGTH; i++){
Maps::oneBigMaps[i].bigMapTypeID = nowMaps[i];
}
}
};
//========================================================
Map.cpp
OneBigMap Maps::oneBigMaps[7] = {
{1,0,0,0,0},
{2,0,0,0,0},
{3,0,0,0,0},
{4,0,0,0,0},
{5,0,0,0,0},
{6,0,0,0,0},
{7,0,0,0,0}
} ;
int Maps::nowMaps[7] = {0,1,2,3,4,5,6};
在另外1个文件里面
Maps* maps = new Maps();
maps->initMapData();
编译通过,运行时候程序崩溃。
如果注释掉 maps->initMapData(); 程序正常运行。
断点看了赋值数据,都是正常的。
若ONE_BIG_MAPS_LENGTH = 1时候,程序不会挂。若ONE_BIG_MAPS_LENGTH>1程序就挂掉。
怀疑是结构体数组初始化问题引起的。但是貌似我声明的没有问题啊。调试了半天看不出来结果。请教各位了。
struct tagOneBigMap{
int bigMapTypeID ; //大地图类型
int bigMapLogicStartX ; //大地图起始位置
int bigMapLogicStartY ;
int bigMapWidth ;
int OneLongMapID ; //单一长地图ID
};
typedef struct tagOneBigMap OneBigMap;
class Maps {
public:
static int nowMaps[7]; //当前生成的地图组合
static const int ONE_BIG_MAPS_LENGTH = 7;
static OneBigMap oneBigMaps[7] ;
/*****************************
构造函数
*****************************/
Maps(){
}
/*****************************
解造函数
*****************************/
~Maps(){
}
/*****************************
初始化底图数据
*****************************/
void initMapData(){
for(int i = 0; i < ONE_BIG_MAPS_LENGTH; i++){
Maps::oneBigMaps[i].bigMapTypeID = nowMaps[i];
}
}
};
//========================================================
Map.cpp
OneBigMap Maps::oneBigMaps[7] = {
{1,0,0,0,0},
{2,0,0,0,0},
{3,0,0,0,0},
{4,0,0,0,0},
{5,0,0,0,0},
{6,0,0,0,0},
{7,0,0,0,0}
} ;
int Maps::nowMaps[7] = {0,1,2,3,4,5,6};
在另外1个文件里面
Maps* maps = new Maps();
maps->initMapData();
编译通过,运行时候程序崩溃。
如果注释掉 maps->initMapData(); 程序正常运行。
断点看了赋值数据,都是正常的。
若ONE_BIG_MAPS_LENGTH = 1时候,程序不会挂。若ONE_BIG_MAPS_LENGTH>1程序就挂掉。
怀疑是结构体数组初始化问题引起的。但是貌似我声明的没有问题啊。调试了半天看不出来结果。请教各位了。
...全文
相关推荐
07. 数组和结构体.docx
- 结构体提供了灵活的数据组合方式,可用于实现复杂的数据结构和算法。通过对数组和结构体的深入了解,我们可以更高效地利用Fortran语言的强大功能解决科学计算中的问题。
C++动态数组详解
在上述代码中,首先从控制台获取数组大小,并使用new操作符分配了指定大小的整型数组内存空间。需要注意的是,在使用动态数组时,一定要小心内存泄漏的问题。如果没有及时释放已经分配的内存空间,会导致程序在运行过程中占用大量的内存,严重影响程序的性能和稳定性。C++中的动态数组是一种非常方便的数据结构,可以在程序运行时根据需要动态地分配内存空间。与静态数组相比,动态数组的大小可变性更强,可以适应不同的存储需求。在C++中,动态数组需要使用new操作符进行内存的分配,然后使用delete操作符释放已分配的内存。
c++从函数返回数组的方法代码
在本例中,使用`static`关键字避免了这个问题,因为静态局部变量在其作用域内只会被初始化一次,即使函数调用结束,它仍然存在。
专升本C语言试题
通过模拟考试的形式,学生可以熟悉考试题型、加深对C语言的理解,并提升解决问题的能力。#### 单项选择题知识点解析1.
C语言程序设计教程修订本 结构体与联合体PPT学习教案.pptx
**8.1.4 结构体类型变量的初始化**结构体变量可以被初始化,但通常只针对全局或静态局部变量。


