在C中的一行中填充一个随机字节的多维数组



我想通过填充随机数(双人(来初始化2D矩阵。

所以,此代码

#define N 1000
int main(void){
  double A[N];
  arc4random_buf(A,N*sizeof(double));
  return 0;
}

运行并产生一个1D阵列,充满了预期的随机数。

但是,这个

#define N 1000
int main(void){
  double A[N][N];
  arc4random_buf(A,N*N*sizeof(double));
  return 0;
}

产生分割故障。我已经尝试在上一行上初始化一个用零来初始化一个,但无济于事。

是在此处使用循环的唯一解决方案?

编辑:正如Eric指出的那样,堆栈大小可能是这里的问题:将n更改为600"修复"第二代码。谢谢!

(堆栈大小确实是我的系统上的8个MIB,所以这应该合适,但是实际代码中还有一个相同大小的第二个数组(

堆栈的大小有限。8 MIB 1 或更小的常见。

如果double为八个字节,而N为1000,则double A[N][N];请求8 MIB。C实施中的堆栈不足以提供此功能,因此您的程序崩溃了。

而不是在您的功能中声明本地对象,而是使用malloc请求内存。通过malloc提供的内存通常更大:

double (*A)[N] = malloc(N * sizeof *A);
if (!A) { /* Handle error. */ }
arc4random_buf(A, N * sizeof *A);

脚注

1 " MIB"代表Mebibyte,即2 20 = 1,048,576字节。

最新更新