我已經通讀了大量的帖子,給出了可以從函數返回int類型數組的方法。我試圖按照使用malloc()
函數動態分配函數內部的方法。從函數返回int類型數組的問題
在示例代碼中,我使用的函數foo
計算的數組中的峯值大於指定值。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* function declaration */
int *foo(int arr[],int size);
int main()
{
int test[] = {1,2,1,4,5,2,7,8,9,1}; //array of test data.
int *p;
p = foo(test,10);
int w;
for(w=0;w<5;w++)
{
printf(" Peak %d\t",p[w]); // This line is giving a non sensible answer.
}
free(p); // free the memory
return 0;
}
int *foo(int arr[],int size) {
int j;
int Peak_min = 3; // Minimum peak height
int *ret = malloc(size * sizeof(*ret));
if(!ret) return 1;
for (j = 0; j < size -1; ++j)
{
if ((arr[j] < arr[j+1]) && (arr[j+1] > arr[j+2]) && (arr[j+1] > Peak_min))// Peak criteria
{
ret[j] = arr[j+1];
printf(" Peak_No %d",ret[j]); // This line is giving the correct output.
}
}
return ret;
}
按照預期,函數中打印的輸出爲5和9。但是,當我調用int main()
中的函數時,輸出會提供不合理的值。我正在努力尋找與我的代碼錯誤,關於如何調試/修復此問題的任何建議?
更新
我編輯在溫控功能FOO for循環
for (j = 0; j < size -2; ++j)
{
if ((arr[j] < arr[j+1]) && (arr[j+1] > arr[j+2]) && (arr[j+1] > Peak_min))// Peak criteria
{
ret[j] = arr[j+1];
printf(" Peak_No %d",ret[j]); // This line is giving the correct output.
}
else
{
ret[j] = 0;
}
}
現在我得到我想要的輸出。
如果'foo'函數中的分配失敗,您應該返回一個空指針。 –
因此將返回值1更改爲NULL? – Sjoseph
至於問題的一個部分,當'j'等於'size-2'時,當你做'arr [j + 2]'時會發生什麼? –