2012-05-25 2 views
0

EDIT: C++ биты удалены, чтобы избежать путаницыTrouble литье 1D массив в 2D массив

У меня есть массив данных, например, так

int numSamples = 16; 
float *lData = (float*)calloc(numSamples, sizeof(float)); 

... и я хотел бы передать эти данные в функции с таким определением. , ,

void processSampleBlock (const float ** inputChannelData, 
         int numInputChannels, 
         ...) 

Как вы можете видеть, эта функция принимает 2D-массив, который может иметь несколько каналов. Мои данные - это всего лишь один канал (1D), но я могу получить код для компиляции, выполнив такой бросок. ,

processSampleBlock ((const float**)(lData), 
          1, 
          ...) 

Тем не менее, во время выполнения я получаю сообщение о плохом доступе, тогда код внутри функционального блока пытается разыменовать данные внутри функции. ,

for (int nn=0; nn< numSamples; ++nn) 
{ 
    float x = inputChannelData[0][nn]; //--> Computer says no 
} 

Я бесполезен для многомерных массивов в стиле C и, вероятно, делаю здесь фундаментальную ошибку. Любая помощь будет замечательной! Благодаря

+0

'повышение :: scoped_array ' - Почему это помечено C? – Pubby

+0

Извините, моя проблема была в бит стиля C :) – learnvst

+0

Почему массив указателей на строки просто не содержит одного указателя на одну строку? – learnvst

ответ

5

Вы должны дать ему указатель на массив строк, так что, у вас есть одна строка дать ему указатель на эту строку:

float *data = ...; 
processSampleBlock(&data, 1); 
+0

@Bo, он сказал, что у него есть только 1 канал – Dani

+0

lData.get() возвращает указатель. Синтаксис, который вы опубликовали, дает ошибку компилятора – learnvst

+0

Я отредактировал вопрос, чтобы удалить все потенциально запутывающие вещи. – learnvst

Смежные вопросы