2016-02-09 16 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