如何访问双指针式矩阵中的元素


double **matrix = NULL;
matrix = (double **)malloc(sizeof(double *) * N);   // N is the size of the square matrix
for(int i=0; i<N; i++)
{
   matrix[i] = (double *)malloc(sizeof(double)*N);
}
// Works good up to the next part
for(int i=0; i<N; i++)
{
   for(int j=0; j<N; j++)
   {
      printf("Value: %f", matrix[i][j]);
   }
}

我试图通过使用上面的方法创建一个二维双精度数组(创建一个指针数组,然后每个指针得到一个双精度数组)。然而,当我试图打印第一个元素矩阵[0][0]时,我得到了一个分段错误。我已经看到了一些其他的帖子做几乎相同的事情,除了我不能让我的工作。

语法方面,您的代码没有任何问题。要么你没有显示完整的代码,要么(不太可能)程序内存不足,而你没有检查malloc的结果来发现这一点。

程序设计方面,你不应该使用碎片式指针指向指针的语法;它在堆上创建N个数组,而不是在相邻的内存单元中分配一个真正的2D数组。堆碎片不利于程序性能,并可能导致各种其他问题(取决于系统)。

转换malloc的结果在C中是没有意义的。在旧的C编译器上,它甚至是有害的。

在打印数组项之前不给它们赋任何值。要将它们全部设置为零,可以使用memset或将malloc替换为calloc。

你应该修复上面提到的问题并重写你的代码如下:

#include <stdlib.h>
#include <stdio.h>
double (*matrix)[N];  // an array pointer
matrix = calloc(1, sizeof(double[N][N])); // pointing at one true 2D array
if(matrix == NULL)
{
  // handle error
}

for(int i=0; i<N; i++)
{
  for(int j=0; j<N; j++)
  {
    printf("Value: %f", matrix[i][j]);
  }
}

嗨,我有这个c++文件,它工作得很好,直到g++编译器结束。

#include <cstdio>
#include <cstdlib>
using namespace std;
int main(){
    int N = 10;
    double **matrix = NULL;
    matrix = (double **)malloc(sizeof(double *) * N);   // N is the size of the square matrix
    for(int i=0; i<N; i++)
    {
        matrix[i] = (double *)malloc(sizeof(double)*N);
    }
    for(int i=0; i<N; i++)
    {
        for(int j=0; j<N; j++)
        {
            printf("Value: %f", matrix[i][j]);
        }
    }
}

相关内容

  • 没有找到相关文章

最新更新