2016-02-09 18 views
-1

我已經寫了主體加一個功能merge()是合併兩個數組arr1[]arr2[]並將其存儲在第三陣列,*arr3[]代碼使用的內存分配給存儲值的數組。如何使用指針

我仍然對指針和內存分配感到困惑。我應該在代碼中放置什麼樣的命令來告訴它將兩個合併的數組放入第三個數組中,*arr3[]

我試着寫*arr3 = (double *) malloc (*sz3)但我收到一個錯誤「ld返回1退出狀態」。

下面是代碼:

/* This is a function that will merge contents of arr1 and arr2 and store in arr3 as a 
    pointer */ 

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

void merge(double arr1[], double arr2[], double *arr3[], int sz1, int sz2, int *sz3); 
void print_arr(double arr[], int sz); 

int main(){ 
    double v0[] = {}; 
    double v1[] = {22.0, 30.1, 35.2, 49.2, 56.4, 65.1, 76.4, 79.6, 86.2, 88.9}; 
    double v2[] = {4.6, 9.0, 13.0, 47.8, 66.9, 68.7, 71.0}; 
    double v3[] = {80.1, 92.7, 97.4, 102.3, 105.0, 112.3, 121, 136.7, 163.4, 177.9}; 
    int sz1 = 10, sz2 = 7, sz3 = 10, szres; 
    double *res; 

    printf("\nTEST 1\n======\n"); 
    merge(v1, v2, &res, sz1, sz2, &szres); 
    print_arr(res,szres); 
    free(res); 

    printf("\nTEST 2\n======\n"); 
    merge(v0, v3, &res, 0, sz3, &szres); 
    print_arr(res,szres); 
    free(res); 

    printf("\nTEST 3\n======\n"); 
    merge(v2, v3, &res, sz2, sz3, &szres); 
    print_arr(res,szres); 
    free(res); 

    return 0; 
} 

/* function to print the array */ 
void print_arr(double arr[], int sz){ 
    for(int i = 0; i < sz; i++){ 
     printf("%7.2lf",arr[i]); 
    } 
    printf("\n"); 
} 

void merge(double arr1[], double arr2[], double *arr3[], int sz1, int sz2, int *sz3) { 

    int i, j, k; 
    j = k = 0; 

    for (i = 0; i < (sz1+sz2);) {  
     if(j < sz1 && k < sz2) { 
      if (arr1[j] < arr2[k]) { 
       *arr3[i] = arr1[j]; 
       j++; 
      } else { 
       *arr3[i] = arr2[k]; 
       k++; 
      }  
      i++; 
     } else if (j == sz1) { 
      for (; i < (sz1 + sz2);) { 
       *arr3[i] = arr2[k]; 
       k++; 
       i++; 
      } 
     } else { 
      for (; i < (sz1+sz2);) { 
       *arr3[i] = arr1[j]; 
       j++; 
       i++; 
      } 
     } 
    } 
} 
+0

LD是你的連接。這意味着你可能試圖使用一個不存在的符號。鏈接器告訴你問題是什麼,但是你沒有在這裏包含完整的錯誤信息。 –

+0

謝謝。我修正了它,但是,我仍然無法將合併的數組存儲在arr3 []中。 –

+0

請將你的'malloc'語句添加到代碼中。 – Holsety

回答

0

兩件事情:

函數參數double *arr3[]double *陣列。你是不是在傳遞一個指向一個double *,所以你需要將它定義爲double **arr3

void merge(double arr1[], double arr2[], double **arr3, int sz1, int sz2, int *sz3) { 

要正確地分配內存適量,需要先賦值給*sz3。然後你可以爲這麼多雙打分配空間。

merge初始for循環之前,添加以下內容:

*sz3 = sz1+sz2; 
*arr3 = malloc((*sz3) * sizeof(double)); 
+0

感謝您的有益反饋! –

+0

@ A.JosephDesmond很高興能幫到你。如果您覺得它有用,請隨時[接受此答案](http://stackoverflow.com/help/accepted-answer)。 – dbush