c++中将两个指针数组合并为第三个指针数组



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; 
}



}

不能复制指针。你把某个对象的data元素的值复制到另一个对象的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;
}

最新更新