我必须整合tetgen(网格生成器)的代码,这显然是经常使用的。但是,我必须使用旧版本(1.4.3而不是1.5),这会给我一个“写入访问冲突”#39; 相关功能在这里:
import urllib2
url = "http://www.equibase.com/premium/chartEmb.cfm?track=ALB&raceDate=06/17/2002&cy=USA&rn=1"
response = urllib2.urlopen(url)
file = open("document.pdf", 'wb')
file.write(response.read())
file.close()
' dummytetbase'和' dummytet'都是双***指针,四面体是双**指针。
示例值为:
' tetwords'是:12。
'(无符号长)四面体 - >对齐' :8。
' tetwords * sizeof(四面体)+四面体 - > alignbytes'是:104。
'(alignptr%(无符号长)四面体 - > alignbytes)'是:0。
代码编译得很好,但当指针从' dummytet' to' dummytet [0]'应该这样做,我得到了这样的写访问权限#39。
所以,dummytet得到了dummytetbase + 8的地址。而且dummytet [x]得到了所有相同的地址,但这会导致写入违规。
知道为什么会这样吗? 谢谢!
答案 0 :(得分:0)
简单:double***
和double**
是完全不同的类型。 double***
指向double**
,而double**
指向double*
。递归地应用此逻辑。
既然两者都是指针,编译器将使用32或64位。您可以告诉编译器关闭,消除差异,并在编译时忽略此问题。这意味着您的编译时问题现在有运行时症状。
退后一步:如果您有T* ptr
且需要T
值,则不要写(T) ptr
。你写*ptr
,或ptr[5]
,或类似的东西。这仍然适用于T==double**
。