diff --git a/src/maths/ni/niiter.c b/src/maths/ni/niiter.c index e7c115836..332926031 100644 --- a/src/maths/ni/niiter.c +++ b/src/maths/ni/niiter.c @@ -246,8 +246,9 @@ NIiter(CKTcircuit *ckt, int maxIter) CKTnumStates the first time it is run */ if (!OldCKTstate0) OldCKTstate0 = TMALLOC(double, ckt->CKTnumStates + 1); - memcpy(OldCKTstate0, ckt->CKTstate0, - (size_t) ckt->CKTnumStates * sizeof(double)); + if (ckt->CKTstate0) + memcpy(OldCKTstate0, ckt->CKTstate0, + (size_t) ckt->CKTnumStates * sizeof(double)); startTime = SPfrontEnd->IFseconds(); SMPsolve(ckt->CKTmatrix, ckt->CKTrhs, ckt->CKTrhsSpare); diff --git a/src/spicelib/analysis/dctran.c b/src/spicelib/analysis/dctran.c index 3c02a6dba..9915e0836 100644 --- a/src/spicelib/analysis/dctran.c +++ b/src/spicelib/analysis/dctran.c @@ -341,8 +341,10 @@ DCtran(CKTcircuit *ckt, ckt->CKTmode = (ckt->CKTmode&MODEUIC) | MODETRAN | MODEINITTRAN; /* modeinittran set here */ ckt->CKTag[0]=ckt->CKTag[1]=0; - memcpy(ckt->CKTstate1, ckt->CKTstate0, - (size_t) ckt->CKTnumStates * sizeof(double)); + if (ckt->CKTstate1 && ckt->CKTstate0) { + memcpy(ckt->CKTstate1, ckt->CKTstate0, + (size_t) ckt->CKTnumStates * sizeof(double)); + } #ifdef WANT_SENSE2 if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN)){ @@ -790,7 +792,7 @@ resume: ckt->CKTstat->STATtimePts ++; ckt->CKTmode = (ckt->CKTmode&MODEUIC)|MODETRAN | MODEINITPRED; - if(firsttime) { + if(firsttime && ckt->CKTstate1 && ckt->CKTstate2 && ckt->CKTstate3) { memcpy(ckt->CKTstate2, ckt->CKTstate1, (size_t) ckt->CKTnumStates * sizeof(double)); memcpy(ckt->CKTstate3, ckt->CKTstate1, diff --git a/src/spicelib/analysis/dctrcurv.c b/src/spicelib/analysis/dctrcurv.c index 3ef5986d6..f2a46d3b4 100644 --- a/src/spicelib/analysis/dctrcurv.c +++ b/src/spicelib/analysis/dctrcurv.c @@ -456,8 +456,10 @@ DCtrCurv(CKTcircuit *ckt, int restart) if (firstTime) { firstTime = 0; - memcpy(ckt->CKTstate1, ckt->CKTstate0, - (size_t) ckt->CKTnumStates * sizeof(double)); + if (ckt->CKTstate1 && ckt->CKTstate0) { + memcpy(ckt->CKTstate1, ckt->CKTstate0, + (size_t) ckt->CKTnumStates * sizeof(double)); + } } i = 0;