数组重新分配内存储器出错
数组重新分配内存出错!
AllocMem()函数目的是:在堆中申请更大的空间,将原数组赋给新数组。但程序死活调试不成功,一个汗!另外还有一个问题,如下使用指针,运行没有问题,但不知有其他副作用不?
最后一个问题,就是栈中声明的数组,能否赋值给堆中的数组,该过程如何进行,请各路大神不吝赐教!
------解决方案--------------------
------解决方案--------------------
只传指针比如 int*,只是原指针的一份拷贝,在AllocMem函数中不能修改原指针的指向,所以返回后原指针的指向没有改变。你可以搜一下二级指针自己了解一下。
------解决方案--------------------
C++的函数是通过传值进行参数传递的,你传入了newArr的一个拷贝,在AllocMem里面进行重新new,但是AllocMen函数返回时,newArr的拷贝就消失了. 正确的写法是,传入指针的引用
------解决方案--------------------
1. 不用指针的指针也行,直接返回新指针
#include <iostream>
using namespace std;
// 重新分配内存
void AllocMem(int* newArr,int new_size)
{
int* tempArr = newArr;
newArr = new int[new_size];
for(int i=0; i<10; i++)
*(newArr+i) = *(tempArr+i);
delete[] tempArr;
tempArr = NULL;
}
int main()
{
int *Arr = new int[10];
cout<<"old Array =";
for(int i=0; i<10;i++)
{
Arr[i] = i;
cout<<" "<<Arr[i];
}
cout<<" \n";
AllocMem(Arr,100);
cout<<"new Array =";
for(int i=0; i<100;i++)
{
cout<<" "<<Arr[i];
if(i%20==0)
cout<<"\n";
}
getchar();
}
AllocMem()函数目的是:在堆中申请更大的空间,将原数组赋给新数组。但程序死活调试不成功,一个汗!另外还有一个问题,如下使用指针,运行没有问题,但不知有其他副作用不?
int arr[10]= {0,1,2,3,4,5,6,7,8,9};
int *ptr = arr;
for(int i=0; i<10;i++)
cout<<ptr[i]<<" ";
最后一个问题,就是栈中声明的数组,能否赋值给堆中的数组,该过程如何进行,请各路大神不吝赐教!
内存分配,复制数组,指针和数组
------解决方案--------------------
#include <iostream>
using namespace std;
// 重新分配内存
void AllocMem(int** newArr,int new_size)
{
int* tempArr = *newArr;
*newArr = new int[new_size];
for(int i=0; i<10; i++)
*(*newArr+i) = *(tempArr+i);
delete[] tempArr;
tempArr = NULL;
}
int main()
{
int *Arr = new int[10];
cout<<"old Array =";
for(int i=0; i<10;i++)
{
Arr[i] = i;
cout<<" "<<Arr[i];
}
cout<<" \n";
AllocMem(&Arr,100);
cout<<"new Array =";
for(int i=0; i<100;i++)
{
cout<<" "<<Arr[i];
if(i%20==0)
cout<<"\n";
}
getchar();
}
------解决方案--------------------
只传指针比如 int*,只是原指针的一份拷贝,在AllocMem函数中不能修改原指针的指向,所以返回后原指针的指向没有改变。你可以搜一下二级指针自己了解一下。
------解决方案--------------------
C++的函数是通过传值进行参数传递的,你传入了newArr的一个拷贝,在AllocMem里面进行重新new,但是AllocMen函数返回时,newArr的拷贝就消失了. 正确的写法是,传入指针的引用
void AllocMem(int*& newArr,int new_size)
{
delete [] newArr;
newArr = new int[new_size];
for(int i=0; i<new_size; i++)
{
newArr[i] = i;
}
}
------解决方案--------------------
1. 不用指针的指针也行,直接返回新指针
int* AllocMem(int* oldArr,int new_size)
{
int* newArr = new int[new_size];
for(int i=0; i<10; i++)
*(newArr+i) = *(oldArr+i);
delete[] oldArr;
return newArr;