- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我不明白为什么这会给我一个段错误。有什么想法吗?
这是返回信号以停止程序的函数(加上在此调用的其他函数):
double bisect(double A0,double A1,double Sol[N],double tol,double c)
{
double Amid,shot;
while (A1-A0 > tol) {
Amid = 0.5*(A0+A1);
shot = shoot(Sol, Amid, c);
if (shot==2.*Pi) {
return Amid;
}
if (shot > 2.*Pi){
A1 = Amid;
}
else if (shot < 2.*Pi){
A0 = Amid;
}
}
return 0.5*(A1+A0);
}
double shoot(double Sol[N],double A,double c)
{
int i,j;
/*Initial Conditions*/
for (i=0;i<buff;i++)
{
Sol[i] = 0.;
}
for (i=buff+l;i<N;i++)
{
Sol[i] = 2.*Pi;
}
Sol[buff]= 0;
Sol[buff+1]= A*exp(sqrt(1+3*c)*dx);
for (i=buff+2;i<buff+l;i++)
{
Sol[i] = (dx*dx)*( sin(Sol[i-1]) + c*sin(3.*(Sol[i-1])) )
- Sol[i-2] + 2.*Sol[i-1];
}
return Sol[i-1];
}
值(value)观buff、l、N 是使用#define 语句定义的。 l = 401, buff = 50, N = 2000
完整代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define w 10 /*characteristic width of a soliton*/
#define dx 0.05 /*distance between lattice sites*/
#define s (2*w)/dx /*size of soliton shape*/
#define l (int)(s+1) /*array length for soliton*/
#define N (int)2000 /*length of field array--lattice sites*/
#define Pi (double)4*atan(1)
#define buff (int)50
double shoot(double Sol[N],double A,double c);
double bisect(double A0,double A1,double Sol[N],double tol,double c);
void super_pos(double antiSol[N],double Sol[N],double phi[][N]);
void vel_ver(double phi[][N],double v,double c,int tsteps,double dt);
int main(int argc, char **argv)
{
double c,Sol[N],antiSol[N],A,A0,A1,tol,v,dt;
int tsteps,i;
FILE *fp1,*fp2,*fp3;
fp1 = fopen("soliton.dat","w");
fp2 = fopen("final-phi.dat","w");
fp3 = fopen("energy.dat","w");
printf("Please input the number of time steps:");
scanf("%d",&tsteps);
printf("Also, enter the time step size:");
scanf("%lf",&dt);
do{
printf("Please input the parameter c in the interval [-1/3,1]:");
scanf("%lf",&c);}
while(c < (-1./3.) || c > 1.);
printf("Please input the inital speed of eiter soliton:");
scanf("%lf",&v);
double phi[tsteps+1][N];
tol = 0.0000001;
A0 = 0.;
A1 = 2.*Pi;
A = bisect(A0,A1,Sol,tol,c);
shoot(Sol,A,c);
for (i=0;i<N;i++)
{
fprintf(fp1,"%d\t",i);
fprintf(fp1,"%lf\n",Sol[i]);
}
fclose(fp1);
super_pos(antiSol,Sol,phi);
/*vel_ver(phi,v,c,tsteps,dt);
for (i=0;i<N;i++){
fprintf(fp2,"%d\t",i);
fprintf(fp2,"%lf\n",phi[tsteps][i]);
}*/
}
double shoot(double Sol[N],double A,double c)
{
int i,j;
/*Initial Conditions*/
for (i=0;i<buff;i++)
{
Sol[i] = 0.;
}
for (i=buff+l;i<N;i++)
{
Sol[i] = 2.*Pi;
}
Sol[buff]= 0;
Sol[buff+1]= A*exp(sqrt(1+3*c)*dx);
for (i=buff+2;i<buff+l;i++)
{
Sol[i] = (dx*dx)*( sin(Sol[i-1]) + c*sin(3.*(Sol[i-1])) )
- Sol[i-2] + 2.*Sol[i-1];
}
return Sol[i-1];
}
double bisect(double A0,double A1,double Sol[N],double tol,double c)
{
double Amid,shot;
while (A1-A0 > tol) {
Amid = 0.5*(A0+A1);
shot = shoot(Sol, Amid, c);
if (shot==2.*Pi) {
return Amid;
}
if (shot > 2.*Pi){
A1 = Amid;
}
else if (shot < 2.*Pi){
A0 = Amid;
}
}
return 0.5*(A1+A0);
}
void super_pos(double antiSol[N],double Sol[N],double phi[][N])
{
int i;
/*for (i=0;i<N;i++)
{
phi[i]=0;
}
for (i=buffer+s;i<1950-s;i++)
{
phi[i]=2*Pi;
}*/
for (i=0;i<N;i++)
{
antiSol[i] = Sol[N-i];
}
/*for (i=0;i<s+1;i++)
{
phi[buffer+j] = Sol[j];
phi[1549+j] = antiSol[j];
}*/
for (i=0;i<N;i++)
{
phi[0][i] = antiSol[i] + Sol[i] - 2.*Pi;
}
}
/* This funciton will set the 2nd input array to the derivative at the time t, for all points x in the lattice */
void deriv2(double phi[][N],double DphiDx2[][N],int t)
{
//double SolDer2[s+1];
int x;
for (x=0;x<N;x++)
{
DphiDx2[t][x] = (phi[buff+x+1][t] + phi[buff+x-1][t] - 2.*phi[x][t])/(dx*dx);
}
/*for (i=0;i<N;i++)
{
ptr[i] = &SolDer2[i];
}*/
//return DphiDx2[x];
}
void vel_ver(double phi[][N],double v,double c,int tsteps,double dt)
{
int t,x;
double d1,d2,dp,DphiDx1[tsteps+1][N],DphiDx2[tsteps+1][N],dpdt[tsteps+1][N],p[tsteps+1][N];
for (t=0;t<tsteps;t++){
if (t==0){
for (x=0;x<N;x++){//inital conditions
deriv2(phi,DphiDx2,t);
dpdt[t][x] = DphiDx2[t][x] - sin(phi[t][x]) - sin(3.*phi[t][x]);
DphiDx1[t][x] = (phi[t][x+1] - phi[t][x])/dx;
p[t][x] = -v*DphiDx1[t][x];
}
}
for (x=0;x<N;x++){//velocity-verlet
phi[t+1][x] = phi[t][x] + dt*p[t][x] + (dt*dt/2)*dpdt[t][x];
p[t+1][x] = p[t][x] + (dt/2)*dpdt[t][x];
deriv2(phi,DphiDx2,t+1);
dpdt[t][x] = DphiDx2[t][x] - sin(phi[t+1][x]) - sin(3.*phi[t+1][x]);
p[t+1][x] += (dt/2)*dpdt[t+1][x];
}
}
}
所以,这真的不是因为我覆盖了 Sol 数组的末尾。我已经注释掉了我怀疑导致问题的两个功能(平分或拍摄)并插入了打印功能。有两件事发生了。当我有如下代码时:
double A,Pi,B,c;
c=0;
Pi = 4.*atan(1.);
A = Pi;
B = 1./4.;
printf("%lf",B);
B = shoot(Sol,A,c);
printf("%lf",B);
我从函数中得到一个段错误,shoot。但是,如果我取消拍摄功能,那么我将拥有:
double A,Pi,B,c;
c=0;
Pi = 4.*atan(1.);
A = Pi;
B = 1./4.;
printf("%lf",B);
它在 printf 处给我一个段错误...为什么!?
最佳答案
也许您正在写超过 Sol
数组的末尾?
我建议您首先使用调试器(例如 gdb)找出导致段错误的行。
关于c - 我的 C 程序中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2755192/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!