【问题标题】:passing malloc-pointer gives me error [duplicate]传递malloc-pointer给我错误[重复]
【发布时间】:2015-05-08 08:27:03
【问题描述】:

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

#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;
    }
}

【问题讨论】:

    标签: c++ c pointers


    【解决方案1】:
    *A[i]=i*2;
    

    应该是

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

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


    其他需要注意的事项:


    如果将指针传递给数组会更简单,即使用
    function(A);
    

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

    void function(int *A)
    

    并使用

    A[i]=i*2;
    

    functionfor 循环中。由于function 中的A 指向mainA 数组的第一个元素的地址,所以您对Afunction 指向的内存所做的任何更改都会反映在main 中的数组 A

    【讨论】:

    • 虽然正确,但正确的答案是拥有void function(int *A),只有一个指针。
    • 谢谢。更新了我的答案。
    • 感谢您的帮助。我认为您可以看到我对 c 相当陌生,并且现在正在处理指针。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多