C - 此函数中使用的未初始化数组



我的任务是为整数数组(n个元素)分配内存,为每个元素提供随机值,并打印它们排序和未排序。当我编译代码时,我收到此警告"'v'在此函数中未初始化",当我尝试运行它时,我得到"分段错误"。

我想知道如果我想用随机值填充数组,为什么要初始化数组?为阵列分配内存的方式有问题吗?(我不确定我做的演员阵容)

这是源代码:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main() {
    int i, j, max, n, *v, aux;
    scanf("%d%d", &n, &max);
    *v=(int*)malloc(n*sizeof(int));
    for(i=0; i<n; i++){
        srand(time(NULL));
        v[i]=rand()%max;
    }
    for(i=0; i<n; i++){
        printf("%d ", v[i]);
    }
    printf("n");
    for(i=0; i<n-1; i++){
        for(j=0; j<n-i-1; j++){
            if(v[j]>v[j+1]){
                aux=v[j];
                v[j]=v[j+1];
                v[j+1]=aux;
            }
        }
    }
    for(i=0; i<n; i++){
        printf("%d ", v[i]);
    }
    printf("n");
    return 0;
}

如果有人能让我了解我做错了什么,并最终修改部分源代码,我将不胜感激。

您在创建数组时打错了字(我猜)。

*v=(int*)malloc(n*sizeof(int));

应该是

v=(int*)malloc(n*sizeof(int));

警告

"v"在此函数中未初始化

是因为上面一行中的引用*v

这是你的问题:

*v=(int*)malloc(n*sizeof(int));

您将分配内存的地址分配给 v 的取消引用 - 也就是说,取消引用未初始化的指针,并写入"野生内存"。

此外,使用单位化仍然是获得随机性的烂方法。在手册中查找rand()

相关内容

  • 没有找到相关文章

最新更新