1

所以今天的练习是创建一个从 0 到 ninitialize 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
    }
}

几个小时后EXC_BAD_ACCESS我疯了,我决定搜索 SO,找到这个问题:Initialize array in function 然后将我的函数更改为:

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 回答