青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

小星星的天空

O(∩_∩)O 小月亮的fans ^_^

  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  16 隨筆 :: 0 文章 :: 61 評(píng)論 :: 0 Trackbacks

今天加載一個(gè)3ds模型,運(yùn)行時(shí)提示說(shuō)
Run-Time Check Failure #2 - Stack around the variable 'version' was corrupted.
明明以前都好用了的,納悶得很。
仔細(xì)查看了下代碼,發(fā)現(xiàn)了一處錯(cuò)誤.
請(qǐng)看代碼:
 

//  下面的函數(shù)讀出3ds文件的主要部分
void C3ds::ProcessNextChunk(t3DModel *pModel, tChunk *pPreviousChunk)
{
 t3DObject newObject = {0};     // 用來(lái)添加到對(duì)象鏈表
 tMaterialInfo newTexture = {0};    // 用來(lái)添加到材質(zhì)鏈表
 unsigned int version[10] = {0};     // 保存文件版本                          注意:此處以前為unsigned int version10 = 0;  之所以發(fā)生那個(gè)錯(cuò)誤,原因是
                                                                                                                     這里只聲明了一個(gè)變量,下面卻那他的地址當(dāng)讀取文件的目的地址
                                                                                                                     當(dāng)讀取字節(jié)數(shù)超過(guò)4時(shí),就會(huì)引起上面那個(gè)錯(cuò)誤。 

 int buffer[50000] = {0};     // 用來(lái)跳過(guò)不需要的數(shù)據(jù)
 m_CurrentChunk = new tChunk;    // 為新的塊分配空間  

 //  下面每讀一個(gè)新塊,都要判斷一下塊的ID,如果該塊是需要的讀入的,則繼續(xù)進(jìn)行
 //  如果是不需要讀入的塊,則略過(guò)

 // 繼續(xù)讀入子塊,直到達(dá)到預(yù)定的長(zhǎng)度
 while (pPreviousChunk->bytesRead < pPreviousChunk->length)
 {
  // 讀入下一個(gè)塊
  ReadChunk(m_CurrentChunk);

  // 判斷塊的ID號(hào)
  switch (m_CurrentChunk->ID)
  {
  case VERSION:       // 文件版本號(hào)
   
   // 在該塊中有一個(gè)無(wú)符號(hào)短整型數(shù)保存了文件的版本
   
   // 讀入文件的版本號(hào),并將字節(jié)數(shù)添加到bytesRead變量中
   m_CurrentChunk->bytesRead += fread(&version, 1, m_CurrentChunk->length - m_CurrentChunk->bytesRead, m_FilePointer);

   // 如果文件版本號(hào)大于3,給出一個(gè)警告信息
   if (version[0] > 0x03)      // 注意:此處原為version0 > 0x03
    MessageBox(NULL, "This 3DS file is over version 3 so it may load incorrectly", "Warning", MB_OK);
   break;

  case OBJECTINFO:      // 網(wǎng)格版本信息
   
   // 讀入下一個(gè)塊
   ReadChunk(m_TempChunk);

   // 獲得網(wǎng)格的版本號(hào)
   m_TempChunk->bytesRead += fread(&version, 1, m_TempChunk->length - m_TempChunk->bytesRead, m_FilePointer);

   // 增加讀入的字節(jié)數(shù)
   m_CurrentChunk->bytesRead += m_TempChunk->bytesRead;

   // 進(jìn)入下一個(gè)塊
   ProcessNextChunk(pModel, m_CurrentChunk);
   break;

  case MATERIAL:       // 材質(zhì)信息

   // 材質(zhì)的數(shù)目遞增
   pModel->numOfMaterials++;

   // 在紋理鏈表中添加一個(gè)空白紋理結(jié)構(gòu)
   pModel->pMaterials.push_back(newTexture);

   // 進(jìn)入材質(zhì)裝入函數(shù)
   ProcessNextMaterialChunk(pModel, m_CurrentChunk);
   break;

  case OBJECT:       // 對(duì)象的名稱
    
   // 該塊是對(duì)象信息塊的頭部,保存了對(duì)象了名稱

   // 對(duì)象數(shù)遞增
   pModel->numOfObjects++;
  
   // 添加一個(gè)新的tObject節(jié)點(diǎn)到對(duì)象鏈表中
   pModel->pObject.push_back(newObject);
   
   // 初始化對(duì)象和它的所有數(shù)據(jù)成員
   memset(&(pModel->pObject[pModel->numOfObjects - 1]), 0, sizeof(t3DObject));

   // 獲得并保存對(duì)象的名稱,然后增加讀入的字節(jié)數(shù)
   m_CurrentChunk->bytesRead += GetString(pModel->pObject[pModel->numOfObjects - 1].strName);
   
   // 進(jìn)入其余的對(duì)象信息的讀入
   ProcessNextObjectChunk(pModel, &(pModel->pObject[pModel->numOfObjects - 1]), m_CurrentChunk);
   break;

  case EDITKEYFRAME:

   // 跳過(guò)關(guān)鍵幀塊的讀入,增加需要讀入的字節(jié)數(shù)
   m_CurrentChunk->bytesRead += fread(buffer, 1, m_CurrentChunk->length - m_CurrentChunk->bytesRead, m_FilePointer);
   break;

  default:
   
   //  跳過(guò)所有忽略的塊的內(nèi)容的讀入,增加需要讀入的字節(jié)數(shù)
   m_CurrentChunk->bytesRead += fread(buffer, 1, m_CurrentChunk->length - m_CurrentChunk->bytesRead, m_FilePointer);
   break;
  }

  // 增加從最后塊讀入的字節(jié)數(shù)
  pPreviousChunk->bytesRead += m_CurrentChunk->bytesRead;
 }

 // 釋放當(dāng)前塊的內(nèi)存空間
 delete m_CurrentChunk;
 m_CurrentChunk = pPreviousChunk;
}



我想大家對(duì)這段代碼都很熟悉,不知大家是否也遇見(jiàn)過(guò)跟我類似的問(wèn)題,也不知道我說(shuō)明白了問(wèn)題沒(méi)有,只希望對(duì)大家有所幫助O(∩_∩)O  。

posted on 2009-05-03 10:46 Little Star 閱讀(6551) 評(píng)論(7)  編輯 收藏 引用 所屬分類: Computer Graphics

評(píng)論

# re: 關(guān)于3ds讀取文件中一處錯(cuò)誤的改正——Run-Time Check Failure #2 - Stack around the variable 'version' was corrupted 2009-05-03 11:38 OwnWaterloo
Run-Time Check Failure #2 - Stack around the variable 'version' was corrupted。
這個(gè)錯(cuò)誤信息描述不太準(zhǔn)確。
其意思是,msvc在debug下為棧上自動(dòng)變量周圍分配了一些保護(hù)空間。
如果發(fā)生棧溢出, 就會(huì)寫(xiě)到保護(hù)空間上去。
這樣, 棧溢出就能被檢查出來(lái), 并且告訴程序員, 某個(gè)變量附近的棧空間被破壞(腐壞?)了。


所以要重現(xiàn)這個(gè)錯(cuò)誤只要這樣:
int a[1212];
a[1986] = 0;

或者, 樓主的代碼與下面更類似:
int i;
(&i)[ 1 ] = 0; // 取i的地址, 將其作為數(shù)組傳遞給fread。
// 但其實(shí)這個(gè)“數(shù)組”, 只有一個(gè)元素。 也會(huì)發(fā)生溢出

要修改, 要么一次只讀取一個(gè)version。
要么將version改到合適大小(10就能保證一定不溢出嗎?)


  回復(fù)  更多評(píng)論
  

# re: 關(guān)于3ds讀取文件中一處錯(cuò)誤的改正——Run-Time Check Failure #2 - Stack around the variable 'version' was corrupted 2009-05-03 15:02 shongbee2
弱弱問(wèn)問(wèn),您讀3DS文件是不是自己寫(xiě)的?可以給我一個(gè)嗎?我現(xiàn)在正在學(xué)?我對(duì)里面的文件格式不是很了解,我寫(xiě)的那個(gè)不能讀入包含拷貝鏡像變換的元素。也不能讀入a通道的材質(zhì)。反正問(wèn)題很多。如果您那個(gè)能正常讀取的話,可以把代碼發(fā)到我的郵箱里面去嗎?我的郵箱是shongbee2@126.com
如果成功的話,一定重謝,因?yàn)樗麑?duì)我太重要了。謝謝。。。  回復(fù)  更多評(píng)論
  

# re: 關(guān)于3ds讀取文件中一處錯(cuò)誤的改正——Run-Time Check Failure #2 - Stack around the variable 'version' was corrupted 2009-05-03 22:22 Little Star
@OwnWaterloo
謝謝你的提醒。
這個(gè)錯(cuò)誤的道理我當(dāng)然明白,我起那樣的標(biāo)題只是為了讓同樣遇見(jiàn)這個(gè)問(wèn)題的人更容易的搜索到這。

這個(gè)辦法也是權(quán)益之計(jì),我想如果10不夠大,可能就得再曾加一些,因?yàn)閷?shí)在是搞不懂3ds這個(gè)鬼格式。目前這個(gè)改動(dòng)至少能讓我把我的所有3ds文件都加載進(jìn)來(lái)。  回復(fù)  更多評(píng)論
  

# re: 關(guān)于3ds讀取文件中一處錯(cuò)誤的改正——Run-Time Check Failure #2 - Stack around the variable 'version' was corrupted 2009-05-03 22:26 Little Star
@shongbee2
這個(gè)不是我自己寫(xiě)的,也是從網(wǎng)上找的代碼,不過(guò)我把它整合到我的程序中了。
我也不大了解3ds的格式,材質(zhì)的讀取我也是從別的地方找的例子,照著上面做的。如果只能給你發(fā)一個(gè)可以讀取3ds文件格式的代碼O(∩_∩)O~  回復(fù)  更多評(píng)論
  

# re: 關(guān)于3ds讀取文件中一處錯(cuò)誤的改正——Run-Time Check Failure #2 - Stack around the variable 'version' was corrupted 2009-05-04 18:35 shongbee2
@Little Star
哦,謝謝。。啦。。博主加油。。。  回復(fù)  更多評(píng)論
  

# re: 關(guān)于3ds讀取文件中一處錯(cuò)誤的改正——Run-Time Check Failure #2 - Stack around the variable 'version' was corrupted 2011-05-30 14:44 hy
感謝啊,正好遇到這個(gè)問(wèn)題  回復(fù)  更多評(píng)論
  

# re: 關(guān)于3ds讀取文件中一處錯(cuò)誤的改正——Run-Time Check Failure #2 - Stack around the variable 'version' was corrupted 2011-06-26 22:37 pandawuwyj
謝謝!正好碰到這個(gè)問(wèn)題!  回復(fù)  更多評(píng)論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            狠狠色伊人亚洲综合成人| 欧美一级视频精品观看| 午夜欧美精品久久久久久久| 一区二区三区日韩| a4yy欧美一区二区三区| 一区二区不卡在线视频 午夜欧美不卡在 | 精品999在线播放| 亚洲国产精品va在线看黑人| 在线中文字幕不卡| 久久国产99| 亚洲激情小视频| 在线亚洲电影| 久久午夜国产精品| 国产精品高潮呻吟| 亚洲第一福利在线观看| 妖精视频成人观看www| 欧美一级二级三级蜜桃| 亚洲成人在线视频网站| 亚洲视频1区| 欧美插天视频在线播放| 国产麻豆视频精品| 一本大道av伊人久久综合| 久久成人一区| 日韩视频中午一区| 久久免费视频这里只有精品| 国产精品福利片| 日韩视频在线观看国产| 久久久青草青青国产亚洲免观| 亚洲大片一区二区三区| 亚洲欧美文学| 欧美日韩在线第一页| 亚洲国产精品一区在线观看不卡 | 亚洲一区二区黄色| 牛夜精品久久久久久久99黑人 | 一区二区激情小说| 欧美国产大片| 欧美一区二区三区在线观看| 欧美日韩在线影院| 999亚洲国产精| 毛片一区二区| 亚洲综合电影| 亚洲伊人网站| 亚洲国产另类精品专区| 欧美一区二区精品久久911| 91久久综合| 卡通动漫国产精品| 激情文学一区| 久久久久这里只有精品| 亚洲专区在线| 国产精品永久免费在线| 亚洲欧美在线磁力| 国产精品99久久久久久久女警| 欧美日韩国产高清视频| 亚洲免费观看高清在线观看 | 鲁大师成人一区二区三区| 亚洲欧美日韩精品久久久久| 国产精品欧美久久| 午夜精品国产更新| 亚洲午夜精品一区二区三区他趣| 欧美日韩免费一区| 99爱精品视频| 国产精品毛片在线| 性欧美大战久久久久久久久| 在线一区免费观看| 欧美性大战久久久久久久蜜臀 | 一本久久精品一区二区| 亚洲电影免费| 欧美精品免费在线| 一区二区欧美国产| 亚洲视频免费在线| 国产麻豆日韩欧美久久| 久久人人97超碰国产公开结果| 久久精品亚洲一区| 亚洲国产精品成人精品| 亚洲精品无人区| 一本色道久久综合| 欧美无砖砖区免费| 欧美一区二区三区在线免费观看| 亚洲欧美日韩在线一区| 国内精品久久久久久久影视麻豆| 久久久久久久久久久久久女国产乱 | 久久国产一二区| 久久久久久成人| 亚洲深夜av| 久久久久久穴| 这里只有视频精品| 久久激情婷婷| 亚洲午夜精品| 久久久久久久性| 在线亚洲激情| 久久久久www| 亚洲天堂视频在线观看| 欧美一区二区三区电影在线观看| 亚洲精品欧美激情| 欧美一级黄色录像| 亚洲久久在线| 久久久91精品国产| 亚洲一卡二卡三卡四卡五卡| 久久久欧美精品sm网站| 亚洲美女在线观看| 国产精品一区二区黑丝| 欧美成黄导航| 国产精品国产亚洲精品看不卡15| 久久乐国产精品| 欧美日韩国产高清| 久久青草欧美一区二区三区| 欧美日韩国产va另类| 久久综合色影院| 国产精品电影在线观看| 欧美国产日韩一区二区在线观看| 国产精品第十页| 亚洲欧洲另类| 亚洲成人在线网站| 亚洲一级高清| 99在线精品观看| 久久综合九色欧美综合狠狠| 午夜激情一区| 欧美精品免费视频| 亚洲国产精品电影| 精品成人在线| 欧美亚洲日本一区| 欧美亚洲专区| 欧美视频一区二区三区在线观看| 亚洲丶国产丶欧美一区二区三区 | 另类激情亚洲| 国产婷婷色一区二区三区| 亚洲最新在线| 一区二区电影免费在线观看| 欧美护士18xxxxhd| 亚洲第一偷拍| 亚洲精品视频免费观看| 欧美成人精品1314www| 欧美激情精品久久久久久免费印度| 国模一区二区三区| 久久精品女人| 麻豆av福利av久久av| 好吊一区二区三区| 欧美在线视频日韩| 欧美/亚洲一区| 亚洲另类自拍| 欧美三区在线观看| 亚洲影院免费观看| 久久久久久久一区| 亚洲高清视频的网址| 你懂的亚洲视频| 亚洲精品一区二区三区婷婷月 | 最新精品在线| 一区二区三区高清视频在线观看| 欧美精品国产精品| 亚洲中无吗在线| 久久久久免费视频| 亚洲国产欧美一区二区三区丁香婷| 欧美电影在线播放| 一区二区三区 在线观看视频| 午夜精品亚洲| 在线看国产一区| 欧美日韩国产小视频| 亚洲一区二区三区精品在线观看| 欧美综合77777色婷婷| 在线看欧美日韩| 欧美日韩一区二区三区四区在线观看| 夜夜嗨av一区二区三区网页| 国产香蕉久久精品综合网| 久久国产视频网| 激情五月综合色婷婷一区二区| 久久不见久久见免费视频1| 免费h精品视频在线播放| 99精品国产在热久久下载| 国产精品丝袜91| 久久综合九色欧美综合狠狠| 99国产精品久久久久久久| 欧美一级大片在线观看| 亚洲国产第一页| 国产精品久久久久久久久| 久久久91精品国产一区二区三区| 亚洲精品一区二区三区福利| 久久精品综合网| 亚洲调教视频在线观看| 狠狠噜噜久久| 欧美视频二区| 久久中文精品| 香蕉精品999视频一区二区| 亚洲区一区二| 久久美女艺术照精彩视频福利播放| 日韩一级二级三级| 韩国av一区| 国产欧美日本一区二区三区| 欧美激情中文不卡| 久久九九99| 亚洲欧美日韩国产成人| 亚洲经典视频在线观看| 久久人人精品| 久久国产精品一区二区| 亚洲一二三区精品| 亚洲六月丁香色婷婷综合久久| 在线观看91精品国产入口| 欧美日韩一区二区三区在线看| 麻豆精品在线观看| 久久久高清一区二区三区| 亚洲欧美国产视频|