【发布时间】:2014-02-11 10:37:44
【问题描述】:
我的任务是为整数数组(n 个元素)分配内存,为每个整数分配随机值,并按排序和未排序的方式打印它们。当我编译代码时,我得到这个警告“'v' is used uninitialized in this function”,当我尝试运行它时,我得到“Segmentation fault”。
我想知道如果我想用随机值填充数组,为什么要初始化数组?我为数组分配内存的方式有问题吗?(我不确定我所做的演员)
这是源代码:
#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之前的“*”。
-
你也应该把 srand() 放到 for 循环之外
-
你应该先解决一个更简单的问题。看来您不熟悉 c 基础知识(即指针语法)。
-
欢迎来到 SO。您的代码中还有其他一些问题。 (1) 不要将
malloc的返回值强制转换为 (2) 不要在循环中调用srand(3) 复制粘贴代码时要更加小心,例如从"#"开始跨度>
标签: c arrays segmentation-fault initialization