各位大侠:小弟遇到这样一个问题,一时想不明白,请大家指点。
我定义了一个struct (MY_STRUCT),然后定义了一个全局数组:MY_STRUCT g_pStructs[100],并且初始化时已将这些g_pStructs置为NULL,
现在我在程序中g_pStructs[1] = (MY_STRUCT)malloc(sizeof(MY_STRUCT)),但在释放时出错:free(g_pStructs[1]).
我定义了一个struct (MY_STRUCT),然后定义了一个全局数组:MY_STRUCT g_pStructs[100],并且初始化时已将这些g_pStructs置为NULL,
现在我在程序中g_pStructs[1] = (MY_STRUCT)malloc(sizeof(MY_STRUCT)),但在释放时出错:free(g_pStructs[1]).
你的用意是建立一个数组,其中每个单元存放一个MY_STRUCT指针,这在C语言里叫做指针数组,即是保存指针的数组。
签名:jmcooler
typedef MY_STRUCT* LPMYSTRUCT;
LPMYSTRUCT g_pStructs[100];
g_pStructs[0] = (LPMYSTRUCT)malloc( sizeof(MY_STRUCT) );
//..........
free( g_pStructs[0] );
签名:jmcooler
typedef struct{
...
}MY_STRUCT,*PMY_SYRUCT;
定义数组:PMY_STRUCT g_pStructs[100].
或者定义结构时用typedef MY_STRUCT* LPMYSTRUCT;
c++中就不需要这样直接用struct yourstruct;
yourstruct m_yourstruct;
原因....且听下回分解
但是我在malloc后,对结构对象的成员做了些操作,再free就不行了。
我想不明白的是,这些成员只是一些int、long或枚举类型的,没有道理影响到free操作啊。
我现在也说不上你的问题出在哪儿。
签名:jmcooler
在我的程序中还用到许多的结构(包括全局结构指针数组),都是这样定义的,但它们的使用(malloc和free)都没出错。同样的方式使用,却不同的结果,使我更加不明白。
在操作中如果我对该成员变量进行赋值,则free()出错!
如果我将对该成员的赋值这一行去掉,则free不出错!
这个试过了多次。是不是枚举类型的冬冬有bug?
还有,我建议你使用C++的new和delete
不会,我是用枚举值进行赋值的。
更奇怪的是,我定义的两个枚举类型变量,对第二个进行赋值则不出错。
typedef struct{
long l;
MY_ENUM e1;
MY_ENUM e2;
}MY_STRUCT;
对e1赋值则free出错,对e2赋值则不出错。
另外,因为是底层开发,规定采用c,因此我不能用new和delete.
如果赋值不对会引起内存问题,free就有问题。
比如:
enum AAA{
tt0 = 0,
tt1
}struct BBB{
int a;
AAA b;
}BBB * c = malloc(sizeof(BBB));
c->b = tt0;
free(c); OK
c->b = 0;
free(c); // 有可能有问题。因为编译器有可能进行优化,将AAA作为1BYTE,但是在
c->b=0;时将AAA作为DWORD(4BYTE)造成内存问题。
enum BBB{HHH,KKK};
typedef struct {
enum BBB eb;
int a,b,c;
}AAA;
int main(int argc, char* argv[])
{
AAA *pa=(AAA*)malloc(sizeof(AAA));
pa->eb = KKK;
pa->a = 1;
free(pa);
return 0;
}