【发布时间】:2013-06-26 08:59:46
【问题描述】:
我开始做关于动态数组的作业,首先,我有一个二维数组:
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指针存储。
我想添加新行,我认为需要 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;
但我认为这是我的麻烦,输出让我很难知道它是如何发生的:
请帮帮我,谢谢大家
【问题讨论】:
-
我认为你没有意识到
ptr[size] = arr;在做什么 -
int **ptr = (int**)malloc(3*sizeof(int));是错误的(realloc 也是如此))。顺便说一句:C 没有引用。也许你的意思是 C++? -
谢谢wildplasser,你能告诉我更多关于我的问题吗?我根据我的教学大纲编码。没有人教我这个问题
-
标记一个 realloc/malloc 问题 C++ 让我,嗯,sigh
-
ptr 的定义类型是
int **ptr;,所以它指向一个指针,(或指针数组的第一个成员)所以,你应该为它分配3 * sizeof (int*)字符。并且:混合 C 和 C++ 真的 是一个坏习惯。