将两个指针数组合并为 C++ 中的第三个指针数组
Merge two arrays of pointers into a third array of pointers in 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
成员。但问题是,那里没有“那里”可以复制 to 。您为 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;
}
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
成员。但问题是,那里没有“那里”可以复制 to 。您为 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;
}