传递malloc指针给我错误

时间:2015-05-08 08:27:04

标签: c++ c pointers

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

#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 : %d\n", A[i]);
    }
    free(A);

}

void function(int **A){
    int i = 0;

    for (i = 0; i < 10; i++){
        *A[i]=i*2;
    }
}

1 个答案:

答案 0 :(得分:3)

*A[i]=i*2;

应该是

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

因为在应用数组下标运算符([])之前需要取消引用指针。在您当前的代码中,根据operator precedence table[]的优先级高于取消引用运算符(*)。所以你需要括号。

<小时/> 其他注意事项:

<小时/> 如果将指针传递给数组会更简单,即使用

function(A);

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

void function(int *A)

并使用

A[i]=i*2;
for的{​​{1}}循环中

。由于function中的A指向function中数组A的第一个元素的地址,因此您对mainA的内存所做的任何更改{1}}指向,将反映在function中的数组A