我创建了一个代码,它基本上会根据字符串的大小创建数组的分配,并在for循环中存储指向分配数组的指针:
int Note;
int ifd;
char **pointer[ir];
for (Note = 0; Note < ir; ++Note) {
char ** Temp=malloc(Count(' ',Sentences[Note])*sizeof(char *));
ifd=StoreArr(Sentences[Note],Temp," ");
pointer[Note]=&Temp;
printer(*(pointer[Note]),ifd);
}
每次函数启动时,char**temp都应该创建一个新的数组,指针应该存储一个指向创建的数组的指针。当我打印创建的数组时,`(printer(pointer[Note]),ifd))。输出正确:
hello
ola
hiya
howdy
eitan
eitanon
eitanya
但在退出for并尝试打印第一个字符串数组后,我只收到eitaneitanoneitanya
因此,我可以假设Temp分配不会创建新的内存,而是简单地覆盖现有的分配。我的问题是如何解决这个问题,以便每次都为Temp分配新的内存,从而为句子""中的所有aray分配空间
感谢
除非发布完整的代码,否则很难理解您的意思。然而,我怀疑以下代码行会导致您的问题:
char **pointer[ir]; //three pointers here
当您使用以下行显示数组时。您正在访问"本地内存",它运行良好。然而,一旦您退出该函数,"局部"变量将不再可访问,因此使用它们将导致未定义的行为。
printer(*(pointer[Note]),ifd);
我建议你把指针改成这样:
char*** pointer;
最重要的是,永远不要返回用[]声明的数组
注意:给你的变量、方法、模块一个描述性的名称
干杯!