2010-07-10 22 views
0

調試源:http://www.cppblog.com/Files/mymsdn/cvector-bug-vs2008-201007101651.zip我的代碼是什麼原因?一個未處理的異常

嘿,我有我的維修代碼,感謝你的幫助!您可以下載我的代碼的正確版本。

源:http://www.cppblog.com/Files/mymsdn/cvector-vs2008-20100710.rar

我想寫向量的C語言版本。我用void ** a這個pRoot表示指針向量。我想保持void ** p可用,比我malloc一個內存。

這樣的:cvector_ptr_ptr = &cvector_ptr;

我通過cvector_ptr_ptr每個函數來處理它。

在我的代碼中,我遇到了一個未處理的異常。我想我已經讀過了。但在函數"insert"中,我可以使用(*cvector_ptr_ptr)->element_size來獲取大小值。我通過cvector_ptr_ptr函數"insert_copy"我不能使用相同的代碼[(*cvector_ptr_ptr)->element_size]來獲取值。

我怎麼了?

+3

發佈你的實際代碼... – 2010-07-10 09:06:58

+4

在這裏發佈相關來源。並決定這是C還是C++。 – 2010-07-10 09:08:16

+0

你能提供錯誤描述嗎? – 2010-07-10 09:08:25

回答

0

我覺得你的代碼有很多問題,一個問題是非常明顯的是

offset = ((*cvector_ptr_ptr)->count + 1) * element_size; 
            ^^^ 
          this is the problem 

您添加的第一個元素應寫入零偏移,不element_size

+0

代碼沒有setp到這一行.......獲得未處理的異常之前.... – 2010-07-10 09:48:16

1

的問題是在你的「create_vector_n」功能外,還有:

cvector_ptr_ptr = &cvector_ptr; 
return cvector_ptr_ptr; 

你是返回一個指向堆棧變量(cvector_ptr),這是極其錯誤的。

+0

我認爲它複製cvector_ptr_ptr的值到結果(超出範圍),但* cvector_ptr_ptr也是可用,因爲它是從malloc創建的。 功能「插入」可用 – 2010-07-10 09:55:08

+0

不,它確實將某個地址返回到堆棧中。但是 - 它實際上可能會工作一段時間!至少在該堆棧值被另一個函數調用覆蓋之前,例如。 – PiN 2010-07-10 10:06:03

+0

我認爲你是對的。 – 2010-07-10 10:08:09

相關問題