代码之家  ›  专栏  ›  技术社区  ›  algo

在C语言中,将两个指针数组合并成第三个指针数组++

  •  0
  • algo  · 技术社区  · 2 年前

    arr1,arr2是两个指针数组,我必须把它们合并成arr3。 当程序得到arr3[1](当k=1)时,程序关闭,我不明白为什么。

    请帮忙。

    class Node {
    public:
        Node* left;
        T data;
        Node* right;
        int height;
    };
        void mergeArrays(Node<T>** arr1,Node<T>** arr2,int len1,int len2){
            int p=0,q=0,k=0;
            Node<T>** arr3 = new Node<T>*[len1+len2];
            
            while ( p < len1 && q < len2) {
                    if ((arr1[p])->data< (arr2[q])->data) {
                        (arr3[k++])->data = (arr1[p++])->data;
        
                    } else {
                        
                        (arr3[k++])->data = (arr2[q++])->data;    
                    }  
                
                }
           
                while ( p < len1) {
                    (arr3[k++])->data = (arr1[p++])->data;
                }
                while ( q < len2) {
             
                    (arr3[k++])->data = (arr2[q++])->data; 
                }
        
                
                
        }
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   WhozCraig    2 年前

    你不是在复制指针。您正在从一个复制值 data 从某个物体到另一个物体的成员 数据 某个物体的成员。但问题是,没有“那里”可以复制 .你给我分配了一大堆指针 arr3 ,但这些指针后面没有对象,因此:

    (arr3[k++])->data = (arr1[p++])->data;
    

    调用未定义的行为。

    我很确定这就是你拍摄的目的:

    template<class T>
    Node<T>** mergeArrays(Node<T> **arr1, Node<T> **arr2, int len1, int len2)
    {
        int p = 0, q = 0, k = 0;
        Node<T> **arr3 = new Node<T> *[len1 + len2];
    
        while (p < len1 && q < len2)
        {
            if ((arr1[p])->data < (arr2[q])->data)
            {
                arr3[k++] = arr1[p++];
            }
            else
            {
                arr3[k++] = arr2[q++];
            }
        }
    
        while (p < len1)
        {
            arr3[k++] = arr1[p++];
        }
        while (q < len2)
        {
            arr3[k++] = arr2[q++];
        }
    
        return arr3;
    }