我创建了一个代码,它基本上会根据字符串的大小创建一个数组的分配,并在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后,并尝试打印第一个字符串数组,我只收到 埃坦 eitanon eitanya
因此,我可以认为Temp分配不会创建新的内存,而只是覆盖现有的分配。 我的问题是如何解决问题,以便每次都为Temp分配新的内存,所以为句子中的所有数组分配空间“
由于
答案 0 :(得分:0)
除非你发布整个代码,否则很难弄明白你的意思。但是,我怀疑以下代码行导致您的问题:
char **pointer[ir]; //three pointers here
使用以下行显示数组时。您正在访问“本地内存”,它工作正常。但是,一旦退出该函数,“本地”变量就不再可访问,因此使用它们将导致未定义的行为。
printer(*(pointer[Note]),ifd);
我建议你把指针改成这样的东西:
char*** pointer;
底线,永远不会返回用[]
声明的数组注意:为变量,方法,模块提供一个描述性名称
干杯!