【问题标题】:Dynamic Array Allocation in C [closed]C中的动态数组分配[关闭]
【发布时间】:2014-10-07 18:48:03
【问题描述】:

代码正在运行,但出现错误。返回数组 使用通过引用返回这个函数-> 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);
   }
}

【问题讨论】:

  • 不要在 C 中转换 malloc
  • scanf("d ",&amp;a1[i]); --> scanf("%d", &amp;a1[i]);
  • 谢谢您的回答...

标签: c arrays memory-management


【解决方案1】:

你没有在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");
  }

}

【讨论】:

  • 谢谢您的回答...
  • @HUDUT - 如果答案对您有帮助,请点击它。如果不是,请提出问题或发表评论。
【解决方案2】:

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

在堆栈上int 的数组是这样创建的:
int array[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|  

索引运算符:[] 提供了一种视觉上简单的方式来访问元素,例如,
array[1][3] 表示第 10 个元素

对于在堆上创建的数组

int **array=0;

首先,创建必要的指针(由[2]表示)

array = malloc(sizeof(int *) * 2); //provide two pointers   

给你指针数组[0]和数组[1]

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

array[0] = malloc(sizeof(int)*6); //space for 6 ints   
array[1] = malloc(sizeof(int)*6); //space for 6 ints  

两个 row 指针指向这些位置:

    |int|int|int|int|int|int|int|int|int|int|int|int|  
    ^ array[0]              ^ array[1]    

给你一个二维数组的表示:array[2][6];

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

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

【讨论】:

    猜你喜欢
    • 2015-01-10
    • 2013-01-22
    • 1970-01-01
    • 2014-09-01
    • 2013-06-23
    • 1970-01-01
    • 2016-10-04
    • 1970-01-01
    • 2010-10-02
    相关资源
    最近更新 更多