【问题标题】:Program crash after trying to access and write to structure member尝试访问和写入结构成员后程序崩溃
【发布时间】:2020-01-02 15:24:51
【问题描述】:

使用 C 语言在 Visual Studio 中工作并尝试做一些示例的fft。 当我尝试向 struct 的成员写入一些值时,我的程序崩溃并且出现错误访问冲突写入位置 0x00000000。

首先,我尝试使用this C 代码,但出现错误:

kiss_fft_cpx *cx_in = new kiss_fft_cpx[nfft];  
kiss_fft_cpx *cx_out = new kiss_fft_cpx[nfft]; 

在这两行。好的,C 中没有新内容。我试图修改它,但我做不到。我试过了

kiss_fft_cpx *cx_in[1024];
kiss_fft_cpx *cx_out[1024];

在我尝试用

传递一些值之后的几行
cx_in[brojac]->r = i; // this is where program breaks
cx_in[brojac]->i = q;   

来自kiss_fft.h 头文件

typedef struct {
   kiss_fft_scalar r;
   kiss_fft_scalar i;
} kiss_fft_cpx;

typedef struct kiss_fft_state* kiss_f;

//beginning of main 
kiss_fft_cpx *cx_in[1024];
kiss_fft_cpx *cx_out[1024];

//after doing some sampling 
cx_in[brojac]->r = i; // this is where program crash
cx_in[brojac]->i = q;

【问题讨论】:

  • cx_in 是一个指针数组。您需要分配内存来存储数据。你这样做吗?请显示此分配。
  • 您需要阅读有关内存分配的教程或书籍。
  • 下面的答案是正确的,但您也可以只执行kiss_fft_cpx cx_in[1024];(即删除* 以分配结构数组而不是结构指针数组)。

标签: c visual-studio struct fft


【解决方案1】:
kiss_fft_cpx *cx_in = new kiss_fft_cpx[nfft];  

在 C++ 中,这将分配一个结构数组。 C中类似的部分是

struct kiss_fft_cpx *cx_in = malloc(nfft * sizeof(struct kiss_fft_cpx));  

你可以把它当作

cx_in[brojac].r = i;  // where 0 <= brojac < nfft

【讨论】:

    【解决方案2】:

    cx_incx_out 只是指向结构数组的指针。你需要分配内存。

    kiss_fft_cpx *cx_in = malloc(1024*sizeof(kiss_fft_cpx));
    kiss_fft_cpx *cx_out = malloc(1024*sizeof(kiss_fft_cpx)); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      相关资源
      最近更新 更多