C 良好做法和内存泄漏
出于某些原因,我需要我的程序对一维数组进行一些数学运算。我在这里发布了一个示例,因为我关心差分函数及其返回值C 良好做法和内存泄漏,c,dynamic,C,Dynamic,出于某些原因,我需要我的程序对一维数组进行一些数学运算。我在这里发布了一个示例,因为我关心差分函数及其返回值 这两个值都是指针,但我需要这样做,因为我无法确定哪一个值更大。我这样做是一种良好的做法还是有更好的方法解决这个问题?就我个人而言,我尽量避免使用指针,如果没有,总是检查空指针。在这种情况下,我将通过以下方式修改difference(): int* difference (int *a, int *b){ if (*a > *b){ *a = *a - *b;
这两个值都是指针,但我需要这样做,因为我无法确定哪一个值更大。我这样做是一种良好的做法还是有更好的方法解决这个问题?就我个人而言,我尽量避免使用指针,如果没有,总是检查空指针。在这种情况下,我将通过以下方式修改
difference()
:
int* difference (int *a, int *b){
if (*a > *b){
*a = *a - *b;
}else{
*a = *b - *a;
}
return a;
}
int main (){
int *xp, *yp;
int x, y;
x = 9;
y = 7;
xp = &x;
yp = &y;
xp = difference (xp,yp);
printf("xp value: %d\n", *xp);
return 0;
}
使用这种新方法,您无需检查空值:
int difference (int a, int b){
if (a > b){
return a - b:
return b - a;
}
此外,在main函数中,不需要从int创建指针:
int* difference (int *a, int *b){
if (a && b)
{
if (*a > *b){
*a = *a - *b;
}else{
*a = *b - *a;
}
return a;
}
// and what must I do with null pointers???????
}
在resume中,如果没有必要,请尽量避免使用指针,如果没有,请始终检查空值我不明白为什么要在此处使用指针。
difference()
函数始终将差异分配给*a
,并始终返回a
。您也可以只获取两个int
参数,然后返回一个int
——这样就可以了
实际上,即使您没有将difference()
的返回赋值给任何对象,也会修改a
指向的值。将返回值指定给作为a
参数传递的同一指针变量是不必要的,因为您将其设置为它已经具有的相同值。它所指向的内容将在函数中通过a
进行修改,而无需考虑
非指针版本:
int main (){
int x, y;
x = 9;
y = 7;
x = sum (x, y);
printf("xp value: %d\n", x);
return 0;
}
或者同样的东西,但是更短:
int difference(int a, int b)
{
if (a > b)
return a - b;
else
return b - a;
}
而不是
int difference(int a, int b)
{
return (a > b) ? (a - b) : (b - a);
}
你会用
xp = difference(xp,yp);
或者,使用xp
和yp
:
x = difference(x,y);
请记住,您不需要仅仅为了使用函数中的值而创建函数参数指针。只有当您想要修改函数外部的变量时,才需要指针,而不是通过将函数的返回值赋给它们。因为您总是在这里只修改一个变量,所以您可以将函数的返回值分配给它,而不是通过函数中的指针来修改它。函数中的所有内容都可以很好地处理作为参数传递的副本——它不需要指向原始变量的指针,而且对于像
int
这样的简单类型,传递指针而不仅仅是值的效率会更低。。。虽然对于大型的类型,如largestruct
s,有时传递指针会更好,即使您不需要严格地传递指针。我不确定问题出在哪里。我想对sum(xp,yp)
的调用应该是xp=difference(xp,yp)代码>这与内存泄漏有什么关系?这里的问题是什么?您是否碰巧对该代码有问题?该代码工作正常。我想知道这样使用指针是否有一个好的实践
*xp = difference(*xp,*yp);