我的任务是为一个整数数组(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;
}
如果有人能让我理解我做错了什么,并最终修改部分来源,我将不胜感激。
答案 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()
。