指针无缘无故改变值c ++

时间:2010-12-11 16:55:49

标签: c++ memory pointers

我试图将指针存储为成员变量,以便在类的生命周期中,其他函数可以使用指针。

但是,当我第一次设置此类时,指针变量对于第一个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); 
}

2 个答案:

答案 0 :(得分:3)

正如所写,并且在修复次要编译错误之后(例如,通过提供NULL和0作为设置的其他参数),所呈现的代码不会显示您在运行时描述的行为。特别是,它打印出相同的非NULL指针101次。结论:这不是您遇到问题的代码(您需要发布一个实际显示问题的示例)。

答案 1 :(得分:3)

我知道这个有点旧了,并且不可能为这个特定的问题提供解决方案,因为它不能用提供的代码重新创建,但我最近碰到了类似的东西,并且认为我会分享一些关于如何解决这个问题的一般提示。

基本上:小心数组。 我忘记了这一点,因为Java和C#的编程让我有点懒惰:你没有在c ++中得到IndexOutOfBoundsException,程序只是转到你告诉它的任何内存位置,并相应地修改它。 如果你很幸运,那么你将会收到一个访问冲突错误,因为程序试图写入操作系统为其分配的位置之外的位置。 如果你不幸运,它会修改属于它的内存的一部分,弄乱你宣布的任何指针,变量或对象。