c-数组内存分配覆盖



我创建了一个代码,它基本上会根据字符串的大小创建数组的分配,并在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;

最重要的是,永远不要返回用[]声明的数组

注意:给你的变量、方法、模块一个描述性的名称

干杯!

相关内容

  • 没有找到相关文章

最新更新