在C中将内存分配给char ***
发布时间:2020-12-16 10:24:20 所属栏目:百科 来源:网络整理
导读:所以,我在为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 M
所以,我在为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个数组分配存储空间,每个数组都有n个字符串,每个数组长达MAX_STR,代码中有几个错误
matrix = calloc(n*MAX_STR,sizeof(char**)); 应该 matrix = calloc(n,sizeof(char**)); 和 for(i = 0; i < MAX_STR; i++) { 应该 for(i = 0; i < n; i++) { 更详细一点, matrix = calloc(n*MAX_STR,sizeof(char**)); for(z = 0; z < n; z++) { 似乎错了.您分配n * MAX_STR元素但仅使用其中的n个 matrix[z] = calloc(n,sizeof(char*)); for(i = 0; i < MAX_STR; i++) { 对于n< MAX_STR来说也是有问题的并且是错误的. (您分配n个元素,然后写入它们的MAX_STR.) 最后,根据您是否认为MAX_STR包含空终止符的空间,您可能需要更改 matrix[z][i] = calloc(MAX_STR,sizeof(char)); 至 matrix[z][i] = calloc(MAX_STR+1,1); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |