2013-01-31 83 views
-3

我正在学习c中的指针。
和我在下面写了这段代码,但它没有运行。
有什么问题?为什么带指针的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; 
} 
+3

'arr'是一个未初始化的指针;你需要使用'malloc'分配一些内存。 –

+6

你应该学会提出更好的问题。什么没有用?它编译了吗?它崩溃了吗?输出是什么?你猜为什么它不起作用? –

+3

这个Q只是接近投票,因为*“哦,我不喜欢这个问题”*?那么,这是没有足够的理由关闭投票Q.有一个简单的使用可编译的代码示例中提供的Q.So并不真正要求关闭。 –

回答

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中,当您使用分配内存你必须通过调用free来显式释放内存,地址是malloc返回的地址。
在解决方案1中,您不必明确释放任何内容,因为array是本地/自动数组,当声明它的作用域{,}结束时,它会自动取消分配。

5

你应该初始化ARR:

int *arr = malloc(sizeof(int) * ARR_SIZE); 
//... program 
free(arr); 
+1

+1,但也值得一提的是,你现在需要在程序的后面免费(arr) – simonc

+0

好点,更新 – Ari

相关问题