1

今日の課題は、0 から n までの関数initialize an array of intを作成することです。fill it

私はこれを書きました:

void        function(int **array, int max)
{
    int i = 0;
    *array = (int *) malloc((max + 1) * sizeof(int));
    while (i++ < max)
    {
        *array[i - 1] = i - 1; // And get EXC_BAD_ACCESS here after i = 2
    }
}

私が夢中になった数時間後、私はSOEXC_BAD_ACCESSを検索することにし ました。

void        function(int **array, int max)
{
    int *ptr; // Create pointer
    int i = 0;
    ptr = (int *) malloc((max + 1) * sizeof(int)); // Changed to malloc to the fresh ptr
    *array = ptr; // assign the ptr
    while (i++ < max)
    {
        ptr[i - 1] = i - 1; // Use the ptr instead of *array and now it works
    }
}

そして今、それは動作します! しかし、それを機能させるだけでは十分ではありません。最初のアプローチが機能しなかった理由を本当に知りたいです! 私には彼らは同じに見えます!

PS:これが私が使用するメインの場合に備えて:

int main() {
    int *ptr = NULL;
    function(&ptr, 9);
    while (*ptr++) {
        printf("%d", *(ptr - 1));
    }
}
4

1 に答える 1

7

優先順位を間違えている

*array[i - 1] = i - 1;

する必要があります

(*array)[i - 1] = i - 1;

括弧なしでアクセスします

*(array[i-1])

またはarray[i-1][0]に割り当てられていないi > 1

于 2013-07-24T16:01:35.213 に答える