首先自己定义了一个结构体
typedef struct ElecStateStruct
{
char elec_name[20]; //电器名字
char elec_state[10]; //电器当前状态
} ElecStateStruct;
然后申明了一个全局结构体指针
ElecStateStruct *home_elec;
在主程序中对其分配内存(如果不分配的话很有可能不能对结构体中的成员赋值,因为其内存地址未定,所以结构体指针一定要分配内存空间。)
home_elec = (ElecStateStruct*)malloc(sizeof(ElecStateStruct));
memset(home_elec,0, sizeof(ElecStateStruct));
内存空间分配好后最好是用memset()来清空一下内存,不然后可能读到一些乱七八糟的东西。
在后面的操作中我有这样一段程序:
…………
strcpy(home_elec->elec_name,column_date[0]);//取得家电名称,放入数组中
strcpy(home_elec->elec_state,column_date[1]);//取得家电状态放入数组中
home_elec+=1;
…………
乍一看没有任何问题,因为我定义的是一个指针,所以我对指针变量自增就相当于移向下一个内存地址,依然可以进行存取,可错就错在这个自增上面了!
当我的结构体很小,比如里面的数组只占据几个字节的空间,而且这个结构体指针也用的很少,也就是所我需要的内存空间不大的时候,程序能相安无事,顺利执行。可是当我有大量这样的结构体需要储存的时候就发生错误了。我一直不停的自增,到最后程序崩溃!
刚开始一直找不到原因,因为我下面有一行代码依然分配了一定的内存空间,一旦运行到这行代码就发生了崩溃,还以为是这行代码的问题,后来做实验,把结构体中的数组改成很大很大,结果结构体只要自增就马上崩溃了!感觉就是结构体指针所指的内存只有当前分配的这个地方可以用,后面的都不能用一样。
GOOGLE了一番,没有找到确切的答案,不过关于结构体的应用倒是找到了不少东西。最后左想右想没办法只有在分配空间的时候根据我的需要预先分配好,如果有3个结构体要存。我就先分配3个这样大的空间。呵呵,这样一来还真的不出错了!
后来想了一下,觉得确实是内存分配上的问题,指针只是指向了一块内存区域,这块区域里面有什么东西是不定的,所以在移动指针的时候很可能发生把程序中还有用的数据覆盖的事情,所以为了安全以后用指针的时候一定要分配好需要的空间。
用户1622076 2015-5-7 11:40
用户563713 2010-5-2 19:43