【问题标题】:Array memory allocating override数组内存分配覆盖
【发布时间】:2013-12-09 18:46:28
【问题描述】:

我创建了一个代码,它基本上会根据字符串的大小创建一个数组分配,并在 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 并尝试打印第一个字符串数组后,我只收到 艾坦 艾塔农 艾坦亚

因此,我可以假设 Temp 分配不会创建新内存,而是简单地覆盖现有分配。 我的问题是如何解决这个问题,以便每次为 Temp 分配新内存,从而为句子中的所有数组分配空间"

谢谢

【问题讨论】:

  • 我真的不明白这种敌意。我只是想学习语言的基础...我从来没有声称自己是专业人士,我正在读一本书。我确实得到了一堆分配警告,但我根本不明白如何解决这些问题。
  • 检查 realloc 手册页可能会对您有所帮助,link

标签: c pointers malloc


【解决方案1】:

除非您发布整个代码,否则很难弄清楚您的意思。但是我怀疑以下代码行会导致您的问题:

char **pointer[ir]; //three pointers here

当您使用以下行显示数组时。您正在访问“本地内存”,它工作正常。但是,一旦退出函数,“本地”变量就无法再访问,因此使用它们会导致未定义的行为。

printer(*(pointer[Note]),ifd);  

我建议您将指针更改为如下内容:

char*** pointer;

底线,永远不要返回用 [] 声明的数组

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

干杯!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 2019-03-06
    • 1970-01-01
    • 2018-02-08
    • 2013-04-20
    • 2012-03-23
    • 1970-01-01
    • 2011-12-15
    相关资源
    最近更新 更多