我正在学习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;
}
答案 0 :(得分: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
是本地/自动数组,当声明它的范围{
,}
结束时,它会自动解除分配。
答案 1 :(得分:5)
你应该初始化arr:
int *arr = malloc(sizeof(int) * ARR_SIZE);
//... program
free(arr);