C中数组的动态内存分配
Dynamic Memory Allocation Of an Array in C
我一直在尝试编写一个简单的代码,其中数组是动态分配的。每次我将数组的一侧指定为 n(假设 4)并继续输入给定的输入时,它正好需要 n+1(在本例中为 5)个输入,但作为输出,它会打印 n(4) 个元素.
下面是我写的主要函数:
int main() {
int *arr, n;
scanf("%d", &n); //n is the size
arr = (int *)malloc(n*sizeof(int));
for(int i=0; i<n; i++) {
scanf("%d ", &arr[i]);
}
for(int i=0 ; i<n; i++) {
printf("%d ", arr[i]);
}
}
我还尝试通过在第一个循环中将 i 初始化为 1 来编写代码,这样它正好需要 n 个输入,但它给出了一个奇怪的输出,如下所示:
7953616 1 2 3
在那两行
scanf("%d ", &arr[i]);
printf("%d ", arr[i]);
你有 %d
而不是 %d
您还需要使用 stdlib
库中的 free()
,因为在您使用完指针后,您需要释放内存以便再次使用它 otherwise this will happen
最终代码
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr, n;
scanf("%d", &n); //n is the size
arr = (int *)malloc(n*sizeof(int));
for(int i=0; i<n; i++)
scanf("%d", &arr[i]);
for(int i=0 ; i<n; i++)
printf("%d", arr[i]);
free(arr);
}
我一直在尝试编写一个简单的代码,其中数组是动态分配的。每次我将数组的一侧指定为 n(假设 4)并继续输入给定的输入时,它正好需要 n+1(在本例中为 5)个输入,但作为输出,它会打印 n(4) 个元素.
下面是我写的主要函数:
int main() {
int *arr, n;
scanf("%d", &n); //n is the size
arr = (int *)malloc(n*sizeof(int));
for(int i=0; i<n; i++) {
scanf("%d ", &arr[i]);
}
for(int i=0 ; i<n; i++) {
printf("%d ", arr[i]);
}
}
我还尝试通过在第一个循环中将 i 初始化为 1 来编写代码,这样它正好需要 n 个输入,但它给出了一个奇怪的输出,如下所示:
7953616 1 2 3
在那两行
scanf("%d ", &arr[i]);
printf("%d ", arr[i]);
你有 %d
而不是 %d
您还需要使用 stdlib
库中的 free()
,因为在您使用完指针后,您需要释放内存以便再次使用它 otherwise this will happen
最终代码
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr, n;
scanf("%d", &n); //n is the size
arr = (int *)malloc(n*sizeof(int));
for(int i=0; i<n; i++)
scanf("%d", &arr[i]);
for(int i=0 ; i<n; i++)
printf("%d", arr[i]);
free(arr);
}