在C中遇到用户定义的数组程序的问题

时间:2016-05-30 12:36:30

标签: c arrays

我必须编写一个编写程序的程序,该程序使用堆来存储数组。我有一个问题,程序在成功运行后会崩溃。我也有一些小的美学问题,元素需要从1开始,并且在最后打印的数字上没有逗号。有人可以帮忙吗?

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int size = 0;
    int* num_elements;
    num_elements = (int*)malloc(sizeof(int) * 3);

    printf("How many int elements will you enter?");
    scanf("%d", &size);
    printf("\n");

    for (int k = 0; k < size; k++)
    {
        printf("Element %d: ", k);
        scanf("%d", &num_elements[k]);
    }

    printf("\n");

    printf("The Array stores the following values: \n\n");

    for (int j = 0; j < size; j++)
    {
        printf("%d, ", num_elements[j]);
    }

    printf("\n");    
    free(num_elements);    
    num_elements = 0;    
    return 0;
}

1 个答案:

答案 0 :(得分:1)

如果用户输入的值超过3,您最终将使用超出范围的内存。在您使用动态内存分配时,请充分利用它。询问用户的size值,然后使用它来调用malloc(),如

int* num_elements;

printf("How many int elements will you enter?");
scanf("%d", &size);

num_elements = malloc(size * sizeof *num_elements);

然后,要打印1中的元素编号,您可以像

一样编写它
printf("Element %d: ", k+1);

那就是说,

  1. Please see this discussion on why not to cast the return value of malloc() and family in C.
  2. 使用前请务必检查malloc()的返回值是否成功。