我有一个 3 维数组。 int maxStrLen、int numberColumns、int numberRows 都设置为大数字,这不可能导致输入越界
char*** KanMingBan = malloc(sizeof(char **));
for(int i = 0; i < numberColumns; i++) {
KanMingBan[i] = malloc(sizeof(char*));
for(int j = 0; j < numberRows; j++) {
KanMingBan[i][j] = malloc(maxStrLen * sizeof(char));
}
}
我有一个复制字符串函数,可以逐字节复制
void copystr(char* pointer, struct kmb kmb1, int length, int i, int j) {
for (int k = 0; k < length; ++k) {
kmb1.KanMingBan[i][j][k] = pointer[k+1];
}
}
在调试器中...一旦 KanMingBan[0][0][2] 设置为某个值。 kmb1.KanMingBan[0][4][0] 变得不可访问。怎么了? (后来出现段错误,因为我试图分配 anMingBan[0][4][0] 但我意识到这是内存无法访问的地方)
10 kmb1.KanMingBan[i][j][k] = pointer[k+1];
(gdb) print kmb1.KanMingBan[0][4][0]
$5 = 0 '\000'
(gdb) print k
$6 = 2
(gdb) n
9 for (int k = 0; k < length; ++k) {
(gdb) print kmb1.KanMingBan[0][4][0]
Cannot access memory at address 0x555555646f54
(gdb)
11
起初我使用了 strcpy 但后来我想因为 malloc 是不连续的我只是逐字节复制。事实证明它没有帮助......并且字节的设置作为 3d 数组中的某些空间会影响数组中的另一个空间......我已经检查了这两个位置是否连续......它们不是......所以我真的不知道发生了什么
事实证明这有效
char ***KanMingBan = malloc(numberColumns * sizeof(char **));
for (int i = 0; i < numberColumns; i++) {
KanMingBan[i] = malloc(numberRows * sizeof(char *));
for (int j = 0; j < numberRows; j++) {
KanMingBan[i][j] = malloc(maxStrLen * sizeof(char));
}
}
当你 malloc 每个元素时?我不知道为什么这有效