我试图将指针存储为成员变量,以便在类的生命周期中,其他函数可以使用指针。
但是,当我第一次设置此类时,指针变量对于第一个printf是正确的,但是当第二个调用时,该值为0x0
在我的主要部分中,首先调用setup,然后重复调用更新。
成员变量在h文件中声明。
为什么指针在第一个和第二个printf之间发生变化?
//主//
int Main(){
TestClass testclass;
unsigned char array[1000];
unsigned char * pVideoIn = array;
testclass.setup(pVideoIn);
for (int i =0; i < 100; i++)
{
testclass.update();
}
}
// //头
#ifndef _TEST_CLASS
#define _TEST_CLASS
class TestClass {
public:
void setup(unsigned char* videoIn);
void update();
unsigned char* videoInp;
unsigned char* videoOutp;
int noPixels;
};
#endif
// //类
#include "TestClass.h"
void TestClass::setup(unsigned char* videoIn)
{
videoInp = videoIn;
videoOutp = videoOut;
noPixels = pixels;
printf("in class app = %p \n", videoInp);
}
void TestClass::update()
{
printf("in class app = %p \n", videoInp);
}
答案 0 :(得分:3)
正如所写,并且在修复次要编译错误之后(例如,通过提供NULL和0作为设置的其他参数),所呈现的代码不会显示您在运行时描述的行为。特别是,它打印出相同的非NULL指针101次。结论:这不是您遇到问题的代码(您需要发布一个实际显示问题的示例)。
答案 1 :(得分:3)
我知道这个有点旧了,并且不可能为这个特定的问题提供解决方案,因为它不能用提供的代码重新创建,但我最近碰到了类似的东西,并且认为我会分享一些关于如何解决这个问题的一般提示。
基本上:小心数组。 我忘记了这一点,因为Java和C#的编程让我有点懒惰:你没有在c ++中得到IndexOutOfBoundsException,程序只是转到你告诉它的任何内存位置,并相应地修改它。 如果你很幸运,那么你将会收到一个访问冲突错误,因为程序试图写入操作系统为其分配的位置之外的位置。 如果你不幸运,它会修改属于它的内存的一部分,弄乱你宣布的任何指针,变量或对象。