代码正在运行,但是有错误。返回数组 使用通过引用返回此函数 - > 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);
}
}
答案 0 :(得分: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");
}
}
答案 1 :(得分:0)
使用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]&amp;阵列[1]
现在你可以为每个指针分配内存:(由[6]表示)
array[0] = malloc(sizeof(int)*6); //space for 6 ints
array[1] = malloc(sizeof(int)*6); //space for 6 ints
两个行指针指向这些位置:
|int|int|int|int|int|int|int|int|int|int|int|int|
^ array[0] ^ array[1]
为您提供2D数组的表示:array[2][6];
。
完成后不要忘记释放所有内容,对于每个malloc,应该有一个免费的:
free(array[0]);
free(array[1]);
free(array);