【发布时间】:2015-09-17 07:37:12
【问题描述】:
我正在运行以下 C 程序并获得 Segmentation fault: 11。
#include <stdio.h>
#include <stdlib.h>
#define SIZE 2
void print_array(double **arr, int size) {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
printf("%f\n", arr[i][j]);
}
}
}
int main(int argc, char **argv) {
double mat[SIZE][SIZE] = {{1, 2}, {3, 4}};
print_array((double **) mat, SIZE);
}
有人可以解释为什么会发生这种情况吗?我不相信我需要为mat 动态分配内存,因为我将它传递给print_array 在 main() 函数中。
将print_array()的函数签名更改为
void print_array(int size, double arr[size][size])
问题消失了。
不过还是很好奇...为什么在将mat 转换为double ** 并将其传递给print_array() 时会出现分段错误?归根结底,大小为 2 的 double arr[2][2] 和 double **arr 是同一个东西,对吗?
【问题讨论】:
标签: c pointers syntax segmentation-fault