我在使用Objective-C ++的iOS项目中改编了Matt Gallagher的"Testing if an arbitrary pointer is a valid object pointer"。它与Objective-C对象一起工作正常,但它总是告诉我,无论它是否有效,我的C ++指针都是无效的。有时代码会在指针处崩溃。有时代码工作正常。但是测试方法总是告诉我指针是错误的。
是否有人知道将此代码改编为C ++类和对象?我可以想象代码只能根据" Class"
的使用与Objective-C一起使用答案 0 :(得分:1)
C ++指针只是引用内存中的地址。您可以使用内存查看器工具查看内存中的内容,但这甚至不能保证内存仍然有效。例如:
char* test = new[13];
strcpy(test, "Hello World!");
delete[] test;
.
.
.
printf("%s", test);
在某些情况下,这将成功打印。有时它会打印一个垃圾串。有时会出现段错误。没有任何东西可以说明指针的有效性。
如果您正在查看刚刚发生过细分的计划,并且您正在尝试查看发生的情况,那么您可以选择以下几种方式:
0xbadfood5
或类似的东西。最好的选择是在代码中进行错误检查。听起来你没有那个,否则你就不会在这里。前提条件和后置条件都很棒,从长远来看(从现在开始)将为您节省大量时间。但是,作为一线希望,您应该利用这一点来确定未来组织中更好的编码标准。
答案 1 :(得分:1)
指针变量的内容是:空指针,指向对象的有效指针,指向数组元素的有效指针或超出数组的最后一个元素,或某些无效指针。
如果它是无效指针,那么任何尝试使用它都会调用未定义的行为。这包括任何尝试检查它是无效指针。那里你被卡住了。您所能做的就是检查它是否为空指针,或者它是否等于某个其他有效指针。
你应该采用Objective-C理念:尝试使用无效指针是编程错误。您不会尝试在运行时检测并处理此问题。你让它崩溃并修复代码中的错误。