先定义了一个动态数组,然后从文件中读取数据来填充这个数组,读完后再把数组的数据画到CHART中去。
如果文件中数据不同则一切都正常,但是如果文件中的数据(是3332)都是一样的,则画到CHART上之后在子程序退出时会出现一个非法指针的错误。
后来另外写了一个小的实验不从文件读数据,而把一组相同的值先赋给数组后,在画到CHART上,则没有异常,但是CHART上会显示一些不正常的虚线出来。请高手看看这到底是怎么一回事?

解决方案 »

  1.   

    程序大概是这个样子
    文件的第一行写的是数组的大小,即一共有多少数据
    只要文件中在第一行以后的数据一样,(如都为3332),则就会出错
    而只要修改第一行以后任何一个数据与别的不同,就没有问题var DataV:array of integer;    //这个是定义的动态数组
        Sum:integer;               //这个是动态数组的大小
        F1:TextFile;       
        i:integer;        
    begin
        AssignFile(F1,'1.txt');
        reset(F1);
        try
          readln(F1,Sum);             //先从文件中读出有多少数据
          setlength(DataV,sum);       //动态数组的大小
          for i:=1 to sum do 
             readln(F1,DataV[i-1]);   //从文件中读入数据到数组
        finally
          closefile(F1);    Chart1.Series[0].Clear;
        for i:=0 to Sum-1 do begin
          Chart1.Series[0].AddXY(i,DataV[i],'',ClDefault);
        end; 
    end;
     
      

  2.   

    在程序的最后,要把给动态数组的空间释放掉。
    加上这样一句试试
    setlength(DataV,0);
      

  3.   

    在实际的程序里是把这个动态数组定义为全局变量,在别的地方还要使用,而出错是在这个子程序调用完以后就出错了。
    另外也试过在这里把这个动态数组释放掉,但还是不行。
    另外也试过定义一个新的动态数组和这个一样大的,把值赋给这个新的数组,然后用新的数组去画CHART,还是一样的问题。
      

  4.   

    如果把这句注释掉,却也没有问题了
    Chart1.Series[0].AddXY(i,DataV[i],'',ClDefault);
    是不是和CHART有关的什么问题?