在C中将内存分配给char ***

在C中将内存分配给char ***,第1张

概述所以,我在为char ***类型变量分配内存时遇到了麻烦.我的目标是创建一个字符串矩阵,我目前用于内存分配的代码如下: char ***matrix;matrix = calloc(n*MAX_STR, sizeof(char**));for(z = 0; z < n; z++) { matrix[z] = calloc(n, sizeof(char*)); for(i = 所以,我在为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);
总结

以上是内存溢出为你收集整理的在C中将内存分配给char ***全部内容,希望文章能够帮你解决在C中将内存分配给char ***所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1219885.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存