当我将整数复制到新的动态数组中时为什么会得到奇怪的值?

问题描述 投票:0回答:1

我用C语言编写了一个函数,用于将所有素数从一个int数组复制到一个新的动态数组中,该数组将具有相同的大小。

这是功能:

int* cpy(int arr[], int size){
    int* newArr = malloc(size * sizeof(int));
    for (int i = 0; i < size; i++){
        if (isPrime(arr[i])){
            *(arr + i) = arr[i];
        }
    }
    return newArr;
}

这是驱动程序代码

int arr[SIZE] = {129, 73, 87, 2, 923, 6743, 983, 23};
int* newArr = cpy(arr, SIZE);
printf("Question 4: ");
printIntArr(newArr);
free(newArr);

注意SIZE是在我用来存储所有原型/宏的头文件中定义为20的宏

由于某种原因,我得到以下输出:

Question 4: 12261328 12255424 285212761 39925 33619971

我不明白我在做什么错。我是C语言的新手,对不起我的错误

编辑:我尝试了第一个评论解决方案,但得到了:

Question 4: 129 6684864 87 33150 923
c malloc sizeof
1个回答
0
投票

您需要在循环中添加第二个索引:

如果不这样做,则将有一个数组,其内存中还有未初始化的值

示例:

输入:1 3 6 9 13输出:1 3 72742729 92652729 13原因:跳过了6和9,并留下了垃圾值。(因为我在智能手机上,所以我现在无法添加代码)

© www.soinside.com 2019 - 2024. All rights reserved.