无效时,realloc指针会发生变化

时间:2013-06-26 08:59:46

标签: c++ arrays realloc

我正在开始关于动态数组的作业,首先,我有一个二维数组:

int initializeInfo[3][4] ={{77,68,0,0},{96,87,89,78},{70,90,86,0}};

并使用指针来存储它:

int **ptr = (int**)malloc(3*sizeof(int));
int size = 0;
for(int i =0;i<3;i++){
    addInitiazeInfo(ptr,initializeInfo[i],size);
}

这是函数addInitiazeInfo:

void addInitiazeInfo(int**& ptr, int arr[],int& size){
    ptr[size] = (int*)malloc(4*sizeof(int));
    if(ptr[size] == NULL){
        return;
    }
    ptr[size] = arr;
    size++;
}

运行正常!二维数组由ptr指针存储。enter image description here

我想添加新行,我认为需要realloc,然后我尝试:

int arr[] = {3,4,5,6};
size++;            
ptr = (int**)realloc(ptr,size * sizeof( int ) );
ptr[size-1] = (int*)malloc(4*sizeof(int));
ptr[size-1] = arr;

但我认为这是我的麻烦,输出让我很难知道它是如何发生的: enter image description here

请帮助我,谢谢大家

1 个答案:

答案 0 :(得分:2)

当你这样做时

ptr[size] = arr;

您实际上是将arr的地址指定给ptr[size]。这意味着您刚刚分配的内存丢失并成功泄露。

您希望逐个元素手动复制或使用memcpy之类的内容。这可能会解决您的问题,具体取决于代码的其余部分。

相关问题