【问题标题】:I am getting error in this code as "invalid indirection"我在此代码中收到错误为“无效间接”
【发布时间】:2015-09-06 03:36:11
【问题描述】:

我正在尝试动态分配一个连续的内存块,存储一些整数值并显示它。

#include<stdio.h>
#include<conio.h>
void main()
{     int i;
      int *ptr;
      ptr=(void *)malloc(sizeof(int)*5); //allocation of memory

      for(i=0;i<5;i++)
              {     scanf("%d",&ptr[i]);
              }    
      for(i=0;i<5;i++)
              {    printf("%d",*ptr[i]); //error is found here``                     
              }
}    }

【问题讨论】:

  • 不要投射 malloc 标准警告并检查内存分配是否成功
  • int main(void) 请,除非conio.h 拉入一个声明malloc() 的标头,否则您应该#include &lt;stdlib.h&gt;。

标签: c memory dynamic indirection


【解决方案1】:

ptr[i] 表示地址 (ptr+i) 处的值,所以 *ptr[i] 没有意义。你应该删除 *

您更正的代码应该是:

 #include<stdio.h>
 #include<stdlib.h>
 #include<conio.h>
 int main()
 { 
  int i;
  int *ptr;
  ptr=malloc(sizeof(int)*5); //allocation of memory

  for(i=0;i<5;i++)
          {     scanf("%d",&ptr[i]);    
           }    
  for(i=0;i<5;i++)
          {    printf("%d",ptr[i]); //loose the *
          }
  return 0;
}     //loose extra }

【讨论】:

  • void main 应该是int main
  • @MattMcNabb 我不明白为什么这是一种强迫行为。请你解释一下>
  • 谢谢 @MattMcNabb
猜你喜欢
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 2012-10-21
相关资源
最近更新 更多