GRRRARD 发表于 2014-12-2 19:13:57

缓冲区溢出

下面是的代码目的是从一个TEXT文件中读取未知大小的矩阵,并将矩阵存放在一个动态分配的空间中。我在用VS2013调试的时候,在红色代码处出现了缓冲区溢出,谁能帮我解释一下为什么码?{:9_241:}

// 从文件读入矩阵
Matrix Matrix::MatValueFileIn(const char *infilename="matrixin.txt")
{
    ifstream inFile;
    inFile.open(infilename,ios::in);
    int row=0;      //矩阵行
    int col=0;      //矩阵列
    string temp;
    double datatemp=0.0;
    vector<double> veMatData;                                           //用来保存输入的临时数据
    if(inFile.bad())
    {
       cout<<"文件不存在"<<endl;
       exit(1);

    }
    if(inFile.is_open())
    {
      cout<<"文件打开成功"<<endl;
      while(getline(inFile,temp,'\n'))
      {
            ++row;                                  //获得矩阵行数
      }
      temp.clear();
      inFile.clear();
      inFile.seekg(0);                         //重新定位到文件头

      {
            double m;                            //获得矩阵列
            char c;
            while(inFile>>m)
            {
               ++col;
                c=inFile.peek();
                if(c=='\n')
                {
                  break;
                }
            }
      }
      inFile.clear();
      inFile.seekg(0);
      this->matRow=row;
      this->matCol=col;
      this->pMatValue=new double;
               
      while(inFile.good() && !inFile.eof())
      {
                       
                       inFile>>datatemp;               
                       veMatData.push_back(datatemp);                        //将矩阵数据读入到vector中               
      }
      if(!veMatData.empty())
      {
            for(size_ti=0; i <(veMatData.size())-1;i++)
            {
                this->pMatValue=veMatData;
            }
      }
      inFile.clear();
      inFile.close();

    }
    else
    {
      cerr<<"文件打开失败"<<endl;
      exit(0);
    }
    return *this;

}

GRRRARD 发表于 2014-12-2 19:15:29

额,颜色没有改。
this->pMatValue=veMatData; 是57行这句

GRRRARD 发表于 2014-12-2 19:18:01

GRRRARD 发表于 2014-12-2 19:15
额,颜色没有改。
this->pMatValue=veMatData; 是57行这句

warning C6386: 写入到“this->pMatValue”时缓冲区溢出:    可写大小为“row*col*8”个字节,但可能写入了“16”个字节。
不太明白这句话里面 16个字节是什么意思,怎么会出现个16呢?

编程难 发表于 2014-12-14 17:23:30

GRRRARD 发表于 2014-12-2 19:18
warning C6386: 写入到“this->pMatValue”时缓冲区溢出:    可写大小为“row*col*8”个字节,但可能写入 ...

this->pMatValue 是个啥?贴就贴全了啊

GRRRARD 发表于 2014-12-15 14:17:30

编程难 发表于 2014-12-14 17:23
this->pMatValue 是个啥?贴就贴全了啊

是这句this->pMatValue=veMatData//pMatValue是Matrix 类中的成员,是个指针,我用这个来存放矩阵元素。veMatData是个 vector,里面存放的是我从文件里读出的矩阵元素,我想把它赋值给pMatValue。因为提前不知道矩阵元素的个数,所以pMatValue是动态分配的,大小是row*col*8,row和col分别是矩阵的行列。
全部的代码有点长,而且和这没有关系所以我就没贴。
页: [1]
查看完整版本: 缓冲区溢出