2009-11-12 62 views
2

我正在重寫一些代碼,從具有指針指向結構中的指針的常規指針開始。結構問題中的指針。我做對了嗎?

這是原來的代碼工作:

int wrote = sf_writef_double(outfile, *mono_channel, frames); 

在新的代碼,在那裏我已經把mono_channel指針的結構。我寫

int wrote = sf_writef_double(outfile, data->mono_channel, frames); 

編譯器不抱怨,但程序崩潰。

所以問題是。 data->mono_channel*mono_channel相同嗎?

擁抱, 路易絲

編輯: 能在這裏更精確的是我做的:

ltfat_complex* fm; 
fm = malloc(data->L * sizeof(ltfat_complex)); 
if (fm == NULL) { puts("fm malloc failed"); exit(1); } 

/* Writes output to fm */  
idgt_fac(data->coef, gdf, data->L, 1, 1, data->a, data->M, fm); 

free(data->mono_channel); 

data->mono_channel = (double*) fm; 
free(fm); 

...

int wrote = sf_writef_double(outfile_handler, data->mono_channel, frames); 

可能的問題是,這我試圖重新使用指針data->mono_channel

EDIT2: 下面是完整的源代碼(〜每700行):

舊其中工程: http://www.student.dtu.dk/~s011392/gabor-io.zip

新: http://www.student.dtu.dk/~s011392/gui.zip

可悲的是,他們需要大量的庫來編譯:來自SVN,fftw3,lapack,blas和sndfile的ltfat。

但TEY是=)

+2

這裏的問題是'free(fm)'。這也釋放了'data-> mono_channel',所以你以後不能使用它。 – 2009-11-12 21:51:10

+0

哇!你是對的。修復了它=)非常感謝!我花了整晚的時間看這個。我在Stack Overflow處是新的。我可以給你分嗎? – Louise 2009-11-12 22:14:37

+0

不幸的是,沒有辦法給點評論。而且他已經擁有唯一可以獲得好評的徽章。 – 2009-11-12 22:22:42

回答

4

你在第一個版本,但不是在第二提領mono_channel。嘗試

int wrote = sf_writef_double(outfile, *(data->mono_channel), frames); 
+0

如果我這樣做,我得到這個編譯器錯誤: audio_save.c:25:錯誤:'sf_writef_double'參數2的不兼容類型 /usr/include/sndfile-64.h:517:注意:預期'const double *'但參數類型爲'雙' make:*** [audio_save.o]錯誤1 任何想法然後可能是什麼問題? – Louise 2009-11-12 21:17:08

+0

與'data-> mono_channel'是完全相同類型的'mono_channel'? – 2009-11-12 21:25:22

+0

INT寫道= sf_writef_double(OUTFILE,與數據 - > mono_channel幀) – Mordachai 2009-11-12 21:37:25

1

data->mono_channel相同(*data).mono_channel

如果你想有針對性的內容變量,我建議你要*(data->mono_channel)

您可能需要重新已讀k & R.

2

不,data-> mono_channel和* mono_channel不是一回事。 *(data-> mono_channel)與* mono_channel相同。

我真的很想知道,如果你想將一個指針傳遞給double而不是double,你的程序中的* mono_channel是如何得到的。顯然,mono_channel是指向雙精度矢量的指針。最有可能的mono_channel是一個指向數組(實際上是一個向量)的雙精度指針。

double *mono_channel[1000]; // let's say 

無論如何,如果你正在崩潰,這可能是因爲你還沒有分配任何存儲,尖mono_channel它,而不是你剛纔定義它作爲你的結構的成員是一個雙*和正在使用它。您需要將mono_channel指向預定義的全局數組或將其與malloc/new分配。

+0

+1進入細節。 (我的大腦現在已經全部用VBA工作了。) – 2009-11-12 21:36:04

+0

現在你提到它了,我也想知道它爲什麼在原文中起作用。 sndfile規範說: sf_count_t sf_writef_double(SNDFILE * sndfile,double * ptr,sf_count_t frames); 我已經鏈接到問題中的源代碼,是的,你可以看到發生了什麼問題? – Louise 2009-11-12 22:08:03