我试图找到最有效的方式来使用免费的'我制作的一个程序中的命令。基本上有几个结构,第一个叫做Operation。以下是它的定义方式 -
struct Operation {
unsigned int ic;
unsigned int dc;
struct symbolStruct *externHead;
struct symbolStruct *symbolHead;
struct DataCode *dataHead;
struct MachineCode *machineHead;
int linenumber;
};
它有几个指向其他结构的指针,让我们以machineHead为例。
struct MachineCode {
unsigned int row : WORD_SIZE;
unsigned int line;
OperandType *structure;
struct MachineCode *next;
};
OperandType看起来像这样 -
typedef struct {
unsigned int numOfOperands : 2;
unsigned int addrMethSou : 2;
unsigned int addrMethDest : 2;
unsigned int operation : 4;
unsigned int extraWords : 2;
char *firstOperand;
char *secondOperand;
} OperandType;
我想要做的是释放字符串" firstOperand"和" secondOperand"在结构(在machineHead中)然后释放machineHead本身,我试着用下面的代码写下来 -
void clear(struct Operation *op) {
struct MachineCode *mh = op->machineHead, *fmh;
while(mh != NULL) {
fmh = mh;
mh = mh->next;
free(fmh->structure->firstOperand);
free(fmh->structure->secondOperand);
free(fmh->structure);
free(fmh);
}
但是程序在运行时崩溃了。是否有一种优雅的方式来做或者我必须制作各种类型的指针变量以清除内存?