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