所以,我在为char ***
类型变量分配内存时遇到了麻烦。我的目标是创建一个字符串矩阵,我目前用于内存分配的代码如下:
char ***matrix;
matrix = calloc(n*MAX_STR, sizeof(char**));
for(z = 0; z < n; z++) {
matrix[z] = calloc(n, sizeof(char*));
for(i = 0; i < MAX_STR; i++) {
matrix[z][i] = calloc(MAX_STR, sizeof(char));
}
}
我已经成功地为一个字符串数组分配了内存,使用这个:
char **list;
list = calloc(n, sizeof(char *));
for (j = 0; j < n; j++){
list[j] = calloc(MAX_STR, sizeof(char));
}
但我现在遇到了矩阵问题。
在 Valgrind 上使用 --leak-check=full 运行程序会给我以下消息:
==5126== Invalid write of size 8
==5126== at 0x400B9F: createmat (proj.c:100)
==5126== by 0x401598: main (proj.c:237)
==5126== Address 0x5210878 is 0 bytes after a block of size 72 alloc'd
==5126== at 0x4C2ABB4: calloc (vg_replace_malloc.c:593)
==5126== by 0x400B52: createmat (proj.c:98)
==5126== by 0x401598: main (proj.c:237)
我想弄清楚为此分配内存,因为在 C 中的内存管理方面我仍然是初学者。任何帮助将不胜感激,谢谢。
编辑:矩阵应该存储 n 个字符串数组,它们对应于输入的行(fgets
稍后读取),并且每个数组分配该行具有的任何数量的单词,每个单词(读取,每个字符串)具有最多MAX_STR
字符数。
n
是从输入中读取的变量,MAX_STR
而是程序中定义的常量。