-4

私はcでポインタを学んでいます。
以下にこのコードを書きましたが、実行されませんでした。
何が問題ですか?

#include<stdio.h>
#include<conio.h>

int main()
{
    const int ARR_SIZE=5;
    int *arr;
    for(int i=0;i<ARR_SIZE;i++){
        *(arr+i) = i*10;
    }
    for(int i=0;i<ARR_SIZE;i++){
        printf("%d. Element is: %d\n",i+1,*(arr+i));
    }
    getch();
    return 0;
}
4

2 に答える 2

6
int *arr;

は単なるポインターであり、別のアドレスを指すことが仕事です。そのメモリに何かを書き込むことができるように、有効で十分なメモリを指す必要があります。
また、

  • ローカル ストレージに配列を割り当て、その配列へのポインターを指すか、
  • 動的メモリをヒープに割り当て、そのメモリへのポインターをポイントします。

解決策 1:

int array[ARR_SIZE];
int *arr = &array;

解決策 2:

int *arr = malloc(sizeof(int) * ARR_SIZE);
//...
//...
//Free the memory once done with usage
free(arr);

注: 解決策 2 では、 を使用してメモリを割り当てるときに、 によって返されたアドレスmallocを呼び出して、メモリの割り当てを明示的に解除する必要があります。ソリューション 1 では、ローカル/自動配列である ため、明示的に割り当てを解除する必要はありません。スコープが宣言されているスコープが終了すると、自動的に割り当てが解除されます。freemalloc
array{}

于 2013-01-31T14:36:26.463 に答える
5

arr を初期化する必要があります。

int *arr = malloc(sizeof(int) * ARR_SIZE);
//... program
free(arr);
于 2013-01-31T14:37:03.270 に答える