我正在學習通過指針分配內存地址是C++。在C++中定義變量和指針(錯誤:分段錯誤(核心轉儲))
所以實踐中,我編寫了一個代碼,向我展示一個正弦信號的圖形以及Hanning窗口應用於該信號時的輸出。 輸出寫入文本文件,然後通過gnuplot
讀取以顯示圖形。下面是代碼:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
int main()
{
int i;
double y;
int N=20;
double Fs=30000;//sampling frequency
double T=1/Fs;//sample time
double f=5000;//frequency
double *in;
double t[N-1];//time vector
double *signal;
for (int i=0; i< N;i++)
{
t[i]=i*T;
signal[i] =0.7 *sin(2*M_PI*f*t[i]);// generate sine waveform
double multiplier = 0.5 * (1 - cos(2*M_PI*i/(N-1)));//Hanning Window
in[i] = multiplier * signal[i];
}
fstream myfile;
myfile.open("example2.txt",fstream::out);
myfile << "plot '-' using 1:2" << std::endl;
for(i = 0; i < N; ++i)
{
myfile << i << " " << in[i] << std::endl;
}
myfile.close();
return 0;
}
所以我得到的錯誤是:分割故障(核心轉儲)並從我讀它是與內存的分配。所以我的問題是:
當我們應該定義由指針變量和分配存儲 地址?是當我們有一個輸入和輸出數組?在這 腳本,我可以簡單地寫入雙重;或者我必須寫*在?
我怎樣才能擺脫這種錯誤的:段錯誤(轉儲核心 )
double * in(和其他變量類似)只是創建指針,它不分配內存。您必須先分配內存才能使用它。與聲明數組本身時必須聲明C風格數組的大小類似。 – 7VoltCrayon
@Suleman,所以當我使用指針時,我總是必須使用malloc函數? – Jack
那麼既然你使用C++,最好的選擇是使用一個向量,或者你必須有一個數組,然後聲明一個數組double信號[N];然後有一個指向其第一個元素的指針int * signalPointer =&signal [0]; (儘管它可能會直接導致signal [i] = 0.7 * sin(2 * M_PI * f * t [i]); – 7VoltCrayon