用随机数填充数组的程序中的内存错误

时间:2017-09-20 23:42:25

标签: c

我有一个程序用于创建一个数组并用随机数填充它。然后,它会检查是否有重复项,并打印出每次重复发生的次数。一切正常,除了Memcheck告诉我有39个错误,我无法弄清楚导致它们的原因(我认为问题来自重复()方法)?

干杯, 哈利

代码 -

MeshRenderer

Memcheck输出 -

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

int main(void) {
    int array_size = 0;
    int *my_array;
    int i = 0;

    printf("Enter the size of the array:\n");
    scanf("%d", &array_size);

    my_array = malloc(array_size * sizeof my_array[0]);
    if (NULL == my_array) {
        fprintf(stderr, "memory allocation failed!\n");
        return EXIT_FAILURE;
    }

    for (i = 0; i < array_size; i++) {
        my_array[i] = rand() % array_size;
    }
    printf("What's in the array:\n");
    for (i = 0; i < array_size; i++) {
        printf("%d ", my_array[i]);
    }
    printf("\n");

    repeated(my_array, array_size);

    free(my_array);

    return EXIT_SUCCESS;
}

void repeated(int *my_array, int array_size) {
    int *array_tracker;
    int i;

    array_tracker = malloc(array_size * sizeof array_tracker[0]);

    for (i = 0; i < array_size; i++) {
        array_tracker[my_array[i]]++;
    }

    for (i = 0; i < array_size; i++) {
        if (array_tracker[i] > 1) {
            printf("%d occurs %d times\n", i, array_tracker[i]);
        }
    }

    free(array_tracker);
}

1 个答案:

答案 0 :(得分:1)

您从未初始化array_tracker的内容。所以当你这样做时:

array_tracker[my_array[i]]++;

您正在递增未初始化的值。这就是为什么你会收到很多关于使用未初始化值的抱怨的原因。

您可以使用calloc()代替malloc()来分配空间并将所有元素初始化为0

array_tracker = calloc(array_size, sizeof array_tracker[0]);