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
这样的简单类型,传递指针而不仅仅是值的效率会更低。。。虽然对于大型的类型,如large
struct
s,有时传递指针会更好,即使您不需要严格地传递指针。

我不确定问题出在哪里。我想对
sum(xp,yp)
的调用应该是
xp=difference(xp,yp)这与内存泄漏有什么关系?这里的问题是什么?您是否碰巧对该代码有问题?该代码工作正常。我想知道这样使用指针是否有一个好的实践
*xp = difference(*xp,*yp);