作者:小梦茜呦_163 | 来源:互联网 | 2023-02-02 13:50
对于我的C编程类,我们必须编写一个void函数,它有一个文件,char***数组和int*变量作为输入.我们应该浏览文件,确定行数并将其存储在int*变量中,然后将每一行复制到char***数组中的相应行中.
我设法从文件中获取每行的副本到char**数组,现在我需要将char***数组指向此char**数组.不幸的是,我在这部分遇到了麻烦.
如果我尝试显示char**数组的行,一切正常.但是,如果我在将char***数组链接到char**数组后尝试显示它的行,则会显示第一行,然后发生分段错误.
这是最后一部分的代码,其中array是char***变量,array2是char**变量,num是int*变量,它具有文件中的行数:
array = (char***)malloc(sizeof(char**));
array = &array2;
for(i = 0; i
我很确定我正在处理错误的内存分配,但我可能错了.在此之前的所有代码似乎都工作得很好.
提前致谢!:)
编辑:这可能重要,也可能不重要,但在main函数中,char***数组实际上是一个char**数组,但在使用该函数时,它输入为&array,使其成为char***.
1> dbush..:
您不想修改,array
因为它指向调用函数中的变量.相反,你想取消引用array
并为一个指针数组分配malloc'ed内存.
假设你num
在文件中有行.首先创建一个指针数组:
*array = malloc(num * sizeof(char *)); // Don't cast the return value of malloc
然后为每一行,为该行分配空间:
for (i=0; i
如果您想使用char **array2
看起来更干净的东西,您希望将其值分配给array
指向的位置,而不是array
指向以下地址array2
:
char **array2 = malloc(num * sizeof(char *));
*array = array2;
...
for (i=0; i