今日の課題は、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));
}
}