C语言中的动态数组分配
代码正在运行,但出现错误。返回数组 使用引用返回此函数->void alloc(int**array,int size)。您如何看待此错误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 "
#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|
实际上,在内存中,它只是一个连续的空间块,足以容纳12int
:
|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-如果答案对你有帮助,请点击它。如果没有帮助,请提问或留下评论。不要在Cscanf(“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);