数组在此函数中未初始化使用

时间:2014-02-11 10:37:45

标签: c arrays segmentation-fault initialization

我的任务是为一个整数数组(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;
}

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

2 个答案:

答案 0 :(得分:2)

你在创建数组时犯了错误(我推测)。

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

应该是

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

警告

  

&#39; V&#39;在此函数中使用未初始化

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

答案 1 :(得分:0)

这是你的问题:

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

将已分配内存的地址分配给v的取消引用 - 也就是说,取消引用未初始化的指针,并写入“wild memory”。

此外,使用单元化仍然是获取随机性的一种腐烂方式。在手册中查找rand()