【问题标题】:Dynamic Memory Allocation Of an Array in C [duplicate]C中数组的动态内存分配
【发布时间】:2021-07-17 00:13:03
【问题描述】:

我一直在尝试编写一个简单的代码,其中数组是动态分配的。每次我将数组的一侧指定为 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 ", &amp;arr[i]); --> scanf("%d", &amp;arr[i]);。放下空间。肯定是某个地方的骗局。
  • @chux-ReinstateMonica 是的,它现在确实给出了正确的输出,但为什么这个空间如此重要?
  • " " 消耗 0 个或多个空格。所以它不会返回,直到看到下面的非空白以了解所有已消耗的空白。
  • @chux-ReinstateMonica 哦,我现在明白了,谢谢。

标签: arrays c malloc dynamic-memory-allocation


【解决方案1】:

这两行

    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);
}

【讨论】:

  • 谢谢。 @Saifeddine Ben Salem
猜你喜欢
  • 2023-03-17
  • 2013-05-24
  • 2021-04-02
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
  • 2021-10-15
  • 1970-01-01
相关资源
最近更新 更多