分割故障仅在未打印到屏幕时发生
Segmentation Fault only happens when not printing to screen
我正试图对前向差分法进行编码以求解热方程,但我的代码在第13次迭代中总是出现分段错误。所以我通过在循环中插入一些printf并检查一些变量的值来进行调试。一旦我坚持printf,我的循环就成功地继续过了它之前出错的点。然而,如果我只是注释掉那些printf,代码将再次出错。。。有人知道为什么会这样吗?
/////////////////////////////////////////////////////////////
//
// Math 448 Assignment 5 Gauss-Seidel
//
/////////////////////////////////////////////////////////////
#include <stdio.h>
#include <iostream>
#include <math.h>
#define I 9
#define J 100
#define M 10
double w[M][J] = {0};
double v[M] = {0};
double K = 0.005;
double H = 0.1;
// J is time, t
// I is distance, x
int main(void){
// First build up t=0
int i,j;
double lambda;
double t = 0;
printf("k=%lfth=%lfn", K, H);
lambda = (0.5)*(double)K/(H*H);
for(i=0;i<=M-1;i++){
if(i<=5)
{
w[i][0] = i*H;
}else{
w[i][0] = (double)(1-i*H);
}
}
printf("lam=%lfn",lambda);
for(j=1;j<=J;j++){
v[0] = 0;
v[I-1] = 0;
for(i=1;i<=M-1;i++){
if(t>=0.06){
// THESE ARE THE PRINTS THAT CAUSE IT TO WORK
//printf("i=%dn1) %lfn2) %lfn3) %lfn",i, w[i-1][j-1], w[i][j-1], w[i+1][j-1]);
//getchar();
}
v[i] = lambda*w[i-1][j-1] + (1-2*lambda)*w[i][j-1] + lambda*w[i+1][j-1];
}
t = j*K;
printf("t=%.4lft",t);
for(i=0;i<M;i++){
printf("%.4lft", v[i]);
}
for(i=1;i<M-1;i++){
w[i][j] = v[i];
}
printf("n");
}
/*
//Psuedocode
for j=1 to N
v0 = 0
vm = 0
for i=1 to m-1
vi = LAM*Wi-1 + (1-2LAM)*Wi + LAM*Wi+1
end for
t = i*k
output(v0, v1, v2...)
end for
*/
return 0;
}
就在这里:
for(j=1;j<=J;j++)
您正在将j
从0
迭代到J
,但数组可以从0
索引到J-1
。
此外,根据Lol4t0的评论,这里是:
w[i+1][j-1];
对于CCD_ 7。
您正试图访问超出j == J
数组界限的插槽。索引在0...J-1
范围内。
相关文章:
- 使用 SFML 和 C++ 将 Pixel 打印到屏幕上
- 使用 fstream 库并在屏幕上打印的文件有问题?
- UE4在屏幕上的打印位置
- Cout 一个字符串可以打印任何内容到屏幕上
- 如何在多维矢量中仅添加特定元素并将内容打印到屏幕
- 如何以CV_16UC1的方式读取JPG图像并在屏幕上打印?
- UNIX API 调用:使用 read() 函数打开文件并将其打印到屏幕上会增加额外的随机字符
- 作为参数传递的打印功能指针导致屏幕上打印"1"
- 在屏幕上打印 X 的形状
- 如何读取二进制文件并在屏幕上打印 3?
- 用putchar在屏幕上打印字符
- C / SFML:使用两个递归调用在屏幕上打印凸形形状仅显示第一个递归调用中的形状,而不是第二个
- 如何在不保存文件的情况下制作打印屏幕并将其发送到FTP服务器?我的工作代码将文件保存到HDD
- 如何在屏幕上打印2^20行C 的整数(1秒钟以下)
- 使用freopen()打印到文件和屏幕
- C++ 强制 std::cout 刷新(打印到屏幕)
- 无法在屏幕上打印 nullptr 的值
- 如何使用Qt/C++和各种显示器拍摄打印屏幕
- C++以二进制形式读取整个文件并将其打印在屏幕上
- 为什么这不会在屏幕上打印任何内容?