【发布时间】:2016-07-04 22:25:21
【问题描述】:
我创建了一个结构,将指针的指针传递给函数,然后调用malloc()。这一切都很好。
但是,如果我尝试访问内存,程序就会冻结。如果我调用另一个函数并更改访问内存,那么一切正常。
void test(TFeld *Feld, TEinstellung E)
{
int i;
for (i=0;i<E.Groesse_X*E.Groesse_Y;i++)
{
Feld[i].Schiff_Vorhanden = false;
Feld[i].Schiff_Versunken = false;
Feld[i].Ueberprueft = false;
}
}
void initField (TEinstellung E, TFeld **Feld)
{
int i;
*Feld = (TFeld*)malloc(E.Groesse_X*E.Groesse_Y*sizeof(TFeld));
test(*Feld,E);
/* for (i=0;i<E.Groesse_X*E.Groesse_Y;i++)
{
Feld[i]->Schiff_Versunken = (bool*)false;
// (*Feld[i]).Schiff_Versunken = false;
//Feld[i]->Ueberprueft = false;
} */
}
TFeld 的定义:
typedef struct TFeld
{
bool Schiff_Vorhanden = false;
bool Ueberprueft = false;
bool Schiff_Versunken = false;
} TFeld;
我注释掉的部分只是在使用测试功能时使程序崩溃。
谁能解释一下这种行为。
【问题讨论】:
-
你写
Feld[i]->的地方可能是指(*Feld)[i]. -
在您的
structtypedef 中,您可以在第一次使用TFeld时省略它。如typedef struct { ... } TFeld;