-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您必须通过调用free返回的地址显式释放内存malloc
在解决方案 1 中,您不必显式释放任何东西,因为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 回答