【发布时间】:2014-07-09 16:58:24
【问题描述】:
我是 C++ 编程的新手,写过这个 C++ 代码:
//colpitts high freq 1 GHz working with delay
#include <iostream>
#include <cmath>
#include <string>
#include <cstring>
using namespace std;
const double pi = 3.1415926;
int main(){
double c0, dx, dt,C1,C2,L,fs,Ceq, freq, tau, Rload, gload, Re, ge,gm,gc1,gc2,ic1,ic2,il,gl ;
c0=20000000000;
dx=0.01;
dt=dx/(2 * c0);
cout<<dt<<"\n";
double V1 [1000000]={};
double V2 [1000000]={};
V1[0]=1e-3;
C1=1e-12;
C2=5e-12;
L=30.4e-9;
fs=4e12;
Ceq=(C1 * C2)/(C1+C2);
cout<<Ceq<<"\n";
freq=1/(2 * pi * (sqrt(L*Ceq)));
cout<<freq<<"\n";
tau=1/freq;
cout<<tau<<"\n";
Rload=50;
Re=1e6;
ge=1/Re;
cout<<ge<<"\n";
gm=0;
gc1=(C1)/dt;
cout<<gc1<<"\n";
ic1=-((C1)/dt) * V1[0];
cout<<ic1<<"\n";
gc2=(C2)/dt;
cout<<gc2<<"\n";
ic2=-((C2)/dt) * V2[0];
cout<<ic2<<"\n";
gl=dt/(L);
cout<<gl<<"\n";
il=gl * (V2[0]-V1[0]);
cout<<il<<"\n";
gload=1/Rload;
cout<<gload<<"\n";
return (0);
}
当我在 Linux 机器上运行它时,它会引发分段错误(核心转储)的错误,但是当我将数组更改为 100000 时,不会引发错误并且程序按预期执行。我知道问题出在分配给我的物理内存上,但是有办法解决吗?有人可以指导我需要进行哪些修改吗?
【问题讨论】:
-
当然。您需要在调试器中运行您的程序。在 Linux 上,这可能意味着 gdb。
-
V1 和 V2 太大,堆栈溢出。您需要使它们成为全局的、静态的,或者更好的是动态分配它们。
-
I know the problem is with physical memory allocated to me这不是问题。使用std::vector<double>而不是那些数组。 -
谢谢 std::vector 运行良好,代码现在运行良好。谢谢大家。
-
写代码时你的空格键有问题吗?