为什么将指针从双***转换为双**到写入访问违规?

时间:2017-04-18 11:11:04

标签: c++ visual-studio pointers tetgen

我必须整合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]得到了所有相同的地址,但这会导致写入违规。

知道为什么会这样吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

简单:double***double**是完全不同的类型。 double***指向double**,而double**指向double*。递归地应用此逻辑。

既然两者都是指针,编译器将使用32或64位。您可以告诉编译器关闭,消除差异,并在编译时忽略此问题。这意味着您的编译时问题现在有运行时症状。

退后一步:如果您有T* ptr且需要T值,则不要写(T) ptr。你写*ptr,或ptr[5],或类似的东西。这仍然适用于T==double**