c-调用函数时出现分段错误



在我的代码中,我只是试图使用函数print_matrix(M(打印初始化的矩阵,但当函数出现分段错误时,但当我在主函数中打印它时,它会按预期打印

这是我复制问题的代码

#include<stdio.h>
#include<stdlib.h>
int N = 5;
typedef struct matrix{
double m[1024][1024];
int size;
}matrix;
matrix I;
void
Print_Matrix(matrix M)
{
printf("hellon");
int row=0, col=0;
for (row = 0; row < N; row++) {
for (col = 0; col < N; col++){
printf(" %5.2f", M.m[row][col]);
}
printf("n");
}
printf("nn");
}
int main()
{
int row, col;
for (row = 0; row < N; row++) {
for (col = 0; col < N; col++) {
if (row == col)
I.m[row][col] = 1.0;
}
}
for(row=0;row<N;row++){
for(col=0;col<N;col++){
printf("%5.2f ", I.m[row][col]);
}
printf("n");
}
Print_Matrix(I);

return 0;

}

输出:

1.00  0.00  0.00  0.00  0.00 
0.00  1.00  0.00  0.00  0.00 
0.00  0.00  1.00  0.00  0.00 
0.00  0.00  0.00  1.00  0.00 
0.00  0.00  0.00  0.00  1.00 
Segmentation fault (core dumped)

你在吹牛。地址消毒剂提供:SUMMARY: AddressSanitizer: stack-overflow /tmp/so/m.c:42 in main

问题是matrix太大,无法传递到堆栈上,因为必须将1024^2个double推送到堆栈上(在我的系统中,这是8388608字节(。在处理大型对象时,通过指向其他函数的指针将它们传递给其他函数。

相关变更:

void
Print_Matrix(matrix const *M) // using a pointer
{
printf("hellon");
int row=0, col=0;
for (row = 0; row < N; row++) {
for (col = 0; col < N; col++){
printf(" %5.2f", M->m[row][col]); // using -> instead of .
}
printf("n");
}
printf("nn");
}
// ...
// later, in main
Print_Matrix(&I);

相关内容

  • 没有找到相关文章

最新更新