c - 简单数组初始化填充在 Linux (CentOS) 中有效,但在 Windows 中无效

标签 c linux memory-management codeblocks

我在 C 中有一个简单的初始化填充例程,它在 Linux 中运行良好。但是,当我尝试在 Code::Blocks 中运行它时,它会产生段错误。

代码如下:

#include <stdio.h>
#include <stdlib.h>

double **rho, **ux, **uy;
double** allocate_double_array(int nx, int ny)
{
   int i;
   double** array=(double**) malloc( (nx * sizeof(double*)) + (nx*ny * sizeof(double**)) );

   if (array==NULL) printf("Memory allocation failed!\n");

   for(i=0; i<nx; ++i)
   {
       array[i] = (double*)(array + nx) + i * ny;
   }
   return array;
}

int main()
{
    int nx = 100;
    int ny = 100;
    int x,y;

    rho   = allocate_double_array(nx,ny);
    ux    = allocate_double_array(nx,ny);
    uy    = allocate_double_array(nx,ny);

    printf("Memory allocated_alter\n");
    for (x=0; x<nx; x++)
    {
        for (y=0; y<ny; y++)
        {
            rho[x][y] = 1.0;
            ux[x][y] = 2.0;
            uy[x][y] = 3.0;
        }
    }
    printf("Initialization Complete\n");
    return 0;
}

知道我哪里出错了吗?

最佳答案

在双重分配函数中。

为什么要这样使用 malloc 函数?

尝试

double** array=(double**) malloc( (nx * sizeof(double*));

然后在循环中

array[i]=(double*)malloc( (ny * sizeof(double));

关于c - 简单数组初始化填充在 Linux (CentOS) 中有效,但在 Windows 中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48148667/

相关文章:

python - 如何将命令的输出复制到文件?

c - 处理动态矩阵中的指针的问题

mysql - 测量 Apache/Mysql 服务器上的内存使用情况

c - 如何使用现有名称数组创建电子邮件地址?

c - 无法理解这个函数的返回值

c - 制作通用函数将项目加载到链接列表中

linux - 通过 SSH 修改 Cpanel 帐户

python代码错误(linux,网络抓取)奇怪的错误

memory-management - 页表条目的引用和修改位如何影响分页?

c - 正确的 C 函数参数变量定义位置