通过malloc-pointer给我带来了错误

passing malloc-pointer gives me error

本文关键字:来了 错误 malloc-pointer 通过      更新时间:2023-10-16

当我运行此代码时,它会给我分段故障错误。

#include <stdio.h>
#include <stdlib.h>
void function(int **A);
void main()
{   
    int *A = NULL;
    int i = 0;
    A = (int *) malloc(70 * sizeof(int));
    function(&A);
    for (i = 0; i < 10; i++){
        printf("A is : %dn", A[i]);
    }
    free(A);
}
void function(int **A){
    int i = 0;
    for (i = 0; i < 10; i++){
        *A[i]=i*2;
    }
}
*A[i]=i*2;

应该是

(*A)[i]=i*2;

因为您需要在应用数组下标操作员([])之前取消指针。在您当前的代码中,根据操作员优先表,[]的优先级比Dereference Operation(*)更重要。因此,您需要括号。


其他要注意的事情:

  • 在C中,不要施放malloc的结果
  • 始终检查malloc的结果,以查看它是否成功


如果将指针传递到数组,即使用

,那将更简单
function(A);

而不是传递A的地址并将function的签名更改为:

void function(int *A)

并使用

A[i]=i*2;

function中的for循环中。由于function中的A指向main中数组A的第一个元素的地址,因此您对function点中A的任何更改都将反映在main中的阵列A中。>