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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句