C语言中的动态数组分配

C语言中的动态数组分配,c,arrays,memory-management,C,Arrays,Memory Management,代码正在运行,但出现错误。返回数组 使用引用返回此函数->void alloc(int**array,int size)。您如何看待此错误 #include <stdio.h> #include <stdlib.h> void memoryys(int **array, int size); int main() { int i; int in; int *a1; printf("please number of elements "

代码正在运行,但出现错误。返回数组 使用引用返回此函数->void alloc(int**array,int size)。您如何看待此错误

#include <stdio.h>
#include <stdlib.h>

void memoryys(int **array, int size);
int main()
{
    int i;
    int in;
    int *a1;

    printf("please number of elements  ");
    scanf("%d",in);
    alloc(&a1,in);

    for(i=0;i<in;i++){
       scanf("d ",&a1[i]);
    }
    free(a1);

    return 0;
}

void alloc(int **array, int size){
   int i;
   *array = (int *) malloc(size*sizeof(int));
   if (*array == NULL){
      printf("Error\n");
      exit(-1);
   }
}
#包括
#包括
无效内存(整数**数组,整数大小);
int main()
{
int i;
int-in;
int*a1;
printf(“请填写元素数量”);
扫描频率(“%d”,英寸);
alloc(&a1,in);

对于(i=0;i您没有在scanf中指定变量的地址

scanf("%d",input1);
应该是

scanf("%d",&input1);
一般来说,最好使用fgets从键盘读取数据,以便对用户输入的内容有一定的控制。然后使用sscanf将值转换为所需的类型

char line[128];
if (fgets(line,sizeof(line), stdin) != NULL)
{
  if (sscanf(line,"%d", &n) == 1)
  {
    do something useful
  }
  else
  {
    puts("invalid input");
  }

}

使用C语言中的数组,实际上只是为特定的数据类型分配一个连续的空间块,在本例中是
int

在堆栈上创建一个
int
数组,如下所示:
int数组[2][6];
/2x6例如,2个数组,每个数组包含6个整数(或2行,每个数组包含6列)
从概念上讲,它可能看起来像行和列:

       0   1   2   3   4   5
0    |int|int|int|int|int|int|
1    |int|int|int|int|int|int|
实际上,在内存中,它只是一个连续的空间块,足以容纳12
int

|int|int|int|int|int|int|int|int|int|int|int|int|  
索引运算符:
[]
提供了一种直观的访问元素的简单方法,例如,
数组[1][3]将表示第10个元素

对于在堆上创建的数组

int **array=0;
首先,创建必要的指针(由[2]表示)

为您提供指针数组[0]&数组[1]

现在您可以为每个指针分配内存:(由[6]表示)

两个行指针指向以下位置:

    |int|int|int|int|int|int|int|int|int|int|int|int|  
    ^ array[0]              ^ array[1]    
为您提供二维数组的表示:
数组[2][6];

完成后不要忘记释放所有内容,对于每个malloc,应该有一个免费的:

free(array[0]);    
free(array[1]);
free(array);

谢谢你的回答…@HUDUT-如果答案对你有帮助,请点击它。如果没有帮助,请提问或留下评论。不要在C
scanf(“d”)和&a1[i]);
-->
scanf(%d”)和&a1[i]);
谢谢你的回答。。。
    |int|int|int|int|int|int|int|int|int|int|int|int|  
    ^ array[0]              ^ array[1]    
free(array[0]);    
free(array[1]);
free(array);