所以我理解我的分段错误是尝试访问内存中找不到的地址的结果。但是,我不确定如何修复错误,我需要传递指针,以便能够在分配函数中分配内存。
int main () {
int ****s, ****t, ****u, ****v;
int numRows, numColumns;
allocateMemory(numRows, numColumns, s, t, u, v);
}
void allocateMemory(int **** &s, int **** &t, int **** &u, int **** &v) {
s = new int***;
t = new int***;
u = new int***;
v = new int***;
****s = ****t;
****t = ****s;
****u = ****v;
****v = ****u;
*s = new int**;
*t = new int**;
*u = new int**;
*v = new int**;
***s = ***t;
***t = ***s;
***u = ***v;
***v = ***u;
**s = new int*;
**t = new int*;
**u = new int*;
**v = new int*;
**s = **t;
**t = **s;
**u = **v;
**v = **u;
**s = new int*[numRows];
for(int xCount = 0; xCount < numRows; ++xCount){
s[xCount] = new int[numColumns];
}
}
答案 0 :(得分:1)
第一个问题:
void allocateMemory(int **** &s, int **** &t, int **** &u, int **** &v) {
...
s[xCount] = new int[numColumns];
这不会编译;这些类型在此作业中不匹配。左侧是int***
,位于右侧int*
。我可以猜到你的意思,但是 -
第二个问题:
void allocateMemory(int **** &s, int **** &t, int **** &u, int **** &v) {
s = new int***;
t = new int***;
u = new int***;
v = new int***;
****s = ****t;
...
您刚刚从这些指针中分配了内存一层深度。现在,您将四个级别取消引用它们。您正在关注实际上存在的指针。这是未定义的行为。
潜在问题:
你正在尝试的东西远远超出你对指针和数组的理解。您必须从更简单的开始。尝试int
及其中的一些指针,然后是int[]
和int**
,依此类推。不要尝试新的水平,直到前一个完美运作; 永远不会添加到无效的代码中。
在此过程中,您将看到封装中某些结构的价值,例如结构。