数组内存分配覆盖

时间:2013-11-25 06:53:10

标签: c pointers malloc

我创建了一个代码,它基本上会根据字符串的大小创建一个数组的分配,并在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分配新的内存,所以为句子中的所有数组分配空间“

由于

1 个答案:

答案 0 :(得分:0)

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

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

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

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

我建议你把指针改成这样的东西:

char*** pointer;

底线,永远不会返回用[]

声明的数组

注意:为变量,方法,模块提供一个描述性名称

干杯!