#include "stdafx.h"
#include <stdlib.h>
#include <time.h>
#define len 10
int *randomArray(void);
int main()
{
srand(time(NULL));
int *rArray = (int *)malloc(sizeof(int) * len);
rArray = randomArray();
for (int i = 0; i < len; i++) {
printf("%d ", *(rArray+i));
}
puts("");
free(rArray);
}
int *randomArray(void)
{
int array[len] = { 0 };
for (int i = 0; i < len; i++) {
array[i] = rand() % len;
}
return array;
}
任务是创建一个 int
的数组s 并有一个函数用随机数填充该数组。函数randomArray()
工作得很好,但由于某种原因分配 rArray = randomArray()
尽管 rArray
的某些元素无法正常工作是有效数字而不是乱码。另外,最后一条主线free(rArray);
使程序崩溃,这让我感到 NumPy ,没有任何意义。如果我删除该行,程序不会崩溃,但我们都知道您需要 free()
一个malloc()
-ed 数组。
最佳答案
这里的主要问题是,array
是 randomArray()
函数作用域中的局部变量。一旦函数返回,返回的地址就会无效。任何进一步尝试使用内存都将导致 undefined behavior .
此外,从您的方法来看,您试图通过函数调用返回的地址覆盖分配的内存,这将导致内存泄漏。相反,更改您的设计,将分配的内存作为参数传递给函数,然后使用 rand()
调用填充元素。
关于c - 在 C 中生成随机数组时出现段错误和未初始化的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52072267/