在C中动态创建3D矩阵

时间:2019-04-09 16:50:40

标签: c matrix heap-memory

我必须创建一个2D矩阵,并且必须在每个单元格中放置一个数组,该数组的长度是在函数中计算的,当我尝试以下代码时,它会因错误Rmd而崩溃。在我看来,矩阵具有N_Sweep行,N列,并且最后一个维度是在函数中计算的。

Segmentation fault (core dumped)

该函数的原型为: double ***gamma; gamma = malloc(N_Sweep*sizeof(double**)); for(i=0;i<N_Sweep;i++){ gamma[i] = malloc(N_Sweep*N*sizeof(double*)); } // ... for(t=0;t<N;t++){ for(i = 0; i<N_Sweep; i++){ for(t_M = 1; t_M<(N_Sweep - i); t_M++){ gamma[i][t] = malloc(sizeof(double) * (N_Sweep-i)); gamma[i][t][t_M] = 3.0; } } }

1 个答案:

答案 0 :(得分:0)

首先,您应该在第一个循环中仅分配N * N_Sweep个字节,因为您不希望N列double ***gamma; gamma = malloc(N_Sweep*sizeof(double**)); for(i=0;i<N_Sweep;i++){ gamma[i] = malloc(N*sizeof(double*)); } // ... for(t=0;t<N;t++){ for(i = 0; i<N_Sweep; i++){ gamma[i][t] = malloc(sizeof(double) * (N_Sweep-i)); for(t_M = 1; t_M<(N_Sweep - i); t_M++){ gamma[i][t][t_M] = 3.0; } } } ,而且在第三个嵌套循环中,您要多次分配矩阵的第三个维度(一次内存泄漏),您应该在进入循环之前执行一次。

因此代码应为:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="React Routes" stopProcessing="true">
          <match url=".*" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Rewrite" url="/" appendQueryString="true" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>