C 删除并在2D动态阵列中删除和紧凑的行
C++ Delete and Compact even rows in 2D dynamic array
我需要一些帮助
此程序必须执行:
•删除所有偶数行
•紧凑了剩余的行2D阵列的顶部
https://gyazo.com/64954d5a5ace39e7bb4264f2e2a9ecdf
代码:
int main(int argc, char ** argv){
int ** array2d;
int size = 10;
array2d = new int *[size];
cout << "***** Before Compaction ******" << endl;
for (int i = 0; i < size; i++) {
array2d[i] = new int[size];
cout << "ROW " <<i << ":";
for (int j = 0; j < size; j++) {
array2d[i][j] = i;
cout << " "<< array2d[i][j];
}
cout << endl;
}
//NEED HELP WITH THIS PART DOWN HERE
for (int i = 0; i < size; i++) {
if (i % 2 == 0) { // delete the even rows
delete[] array2d[i];
array2d[i] = NULL;
}
// for each row in the first half, redirect the pointer
// to the next odd row
if(i<size/2){
array2d[i] = array2d[2 * i + 1];
array2d[2 * i + 1] = NULL;
}
cout << endl;
}
return 0;
}
if (i % 2 == 0) { // delete the even rows
delete[] array2d[i];
array2d[i] = NULL;
}
i == 0
对应于第一行。我认为您可能想将其更改为:
if ((i+1) % 2 == 0) { // delete the even rows
delete[] array2d[i];
array2d[i] = NULL;
}
然后,
array2d[i] = array2d[2 * i + 1];
array2d[2 * i + 1] = NULL;
需要:
array2d[i] = array2d[2 * i];
array2d[2 * i] = NULL;
update
您拥有的问题以及我建议的问题是您正在泄漏内存。当您使用时:
array2d[i] = array2d[2 * i];
丢失了为array2d[i]
分配的内存。您无法处理该内存。您可能需要交换指针值以允许您分配所有内存。
int* temp = array2d[i];
array2d[i] = array2d[2 * i];
array2d[2 * i] = temp;
相关文章:
- 从阵列C++中删除重复项
- 为什么删除分配的阵列会导致内存错误?
- 重新分配2D阵列并删除旧阵列
- 删除阵列时出现分段错误
- 阵列的临时存储如何用于C++中的删除恢复?
- 将C 中的每个指针删除作为阵列的指针安全吗?
- 唯一/共享 ptr 用于在数组超出范围后自动删除阵列
- C 在指针阵列中删除第一个元素,以效应后来的元素
- 在阵列C 中删除和转移剩余的元素
- 阵列旋转并删除
- 删除指向排序的字符串阵列的指针会在运行后会有一个错误
- C 对象阵列删除一个
- 复制动态阵列并使用过载的操作员删除原件
- C 删除并在2D动态阵列中删除和紧凑的行
- 在JNI呼叫中使用后,应删除/释放JarrayObject(字符串阵列)
- 删除阵列与指针
- 删除char阵列指针触发了一个神秘的断点
- 删除阵列错误
- 3D阵列删除C++的性能较慢
- 从1D阵列中删除多个引用