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是程序中定义的常量.
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 ***所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)