加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在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个字符串数组,这些字符串对应于输入的行(稍后用fgets读取),每个数组分配行所具有的任意数量的单词,每个单词(读取,每个字符串)具有最大MAX_STR个字符数.
n是从输入读取的变量,而MAX_STR是程序中定义的常量.

解决方法

假设你想为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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读