C 变量混淆
我必须阅读函数中的更多元素p。 在循环中每次创建pElem是否更好C 变量混淆,c,variables,loops,memory-management,malloc,C,Variables,Loops,Memory Management,Malloc,我必须阅读函数中的更多元素p。 在循环中每次创建pElem是否更好 dataStr * process(char *start, char *stop, GTree* tree) { while ( (cp != NULL) && ( cp < nextI)) { //I malloc inside of getPElem function pElem * p = getPElem(cp, dateP, s); free(p
dataStr * process(char *start, char *stop, GTree* tree)
{
while ( (cp != NULL) && ( cp < nextI))
{
//I malloc inside of getPElem function
pElem * p = getPElem(cp, dateP, s);
free(p);
}
}
dataStr*进程(char*开始、char*停止、GTree*树)
{
而((cp!=NULL)和&(cp
或者我最好初始化一次p元素,然后每次都重用它
dataStr * process(char *start, char *stop, GTree* tree)
{
pElem * p = malloc(sizeof(p));
while ( (cp != NULL) && ( cp < nextI))
{
fillPElem(p, cp, dateP, s);
}
free(p);
}
dataStr*进程(char*开始、char*停止、GTree*树)
{
pElem*p=malloc(sizeof(p));
而((cp!=NULL)和&(cp
如果一个元素更好,我是否应该在函数外部对其进行malloc(函数“process”也在循环中调用):
dataStr*进程(char*start、char*stop、GTree*tree、pElem*p)
{
而((cp!=NULL)和&(cp
或者每次在函数中,如第二个示例中所示?如果您不需要pElems超过封闭范围,则根本不需要动态分配:
dataStr * process(char *start, char *stop, GTree* tree)
{
pElem p;
while ( (cp != NULL) && ( cp < nextI))
{
fillPElem(&p, cp, dateP, s);
}
}
dataStr*进程(char*开始、char*停止、GTree*树)
{
pElem p;
而((cp!=NULL)和&(cp
(是的,我知道cp、nextI等都没有定义——我只是从问题中复制出来的)。你发布的前两个片段应该是等效的?对我来说,
malloc
在循环中并没有得到很好的优化。如果只将其用作缓冲区,则只应执行一个malloc
。是的,所有代码段都应该是等效的。因此,在函数之外分配它并将其作为参数不是更好吗?如果没有关于打算如何使用它的提示,我无法回答这个问题。没有一个原始函数将元素暴露在函数之外。我根本不需要它暴露在函数之外。我问这个问题的唯一原因是,函数进程是在循环中调用的。所以我每次都会得到新的毛皮。我想,我也可以在外面初始化一次。我真的不知道什么是更好的,所以我问为什么。您的解决方案更“自然”。声明变量并不会初始化它,它只是在堆栈上保留一些空间。对不起,这就是我提到的。现在它一直在保留和释放。
dataStr * process(char *start, char *stop, GTree* tree)
{
pElem p;
while ( (cp != NULL) && ( cp < nextI))
{
fillPElem(&p, cp, dateP, s);
}
}