C++ 指针无缘无故更改值c++;

C++ 指针无缘无故更改值c++;,c++,memory,pointers,C++,Memory,Pointers,我试图将指针存储为成员变量,以便在类的生命周期中,其他函数可以使用指针 但是,当我第一次设置这个类时,指针变量对于第一个printf是正确的,但是当调用第二个printf时,值是0x0 在我的main中,首先调用一次setup,然后重复调用update 成员变量在h文件中声明 为什么指针在第一个和第二个printf之间变化 //主要// int Main(){ TestClass testclass; unsigned char array[1000]; unsigned char * pV

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

但是,当我第一次设置这个类时,指针变量对于第一个printf是正确的,但是当调用第二个printf时,值是0x0

在我的main中,首先调用一次setup,然后重复调用update

成员变量在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();
    }
}
//阶级//

#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); 
}

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

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

我知道这一个有点旧,无法为这个特定问题提供解决方案,因为无法使用提供的代码重新创建它,但我最近遇到了类似的问题,我想和大家分享一些关于如何解决这个问题的一般性建议

基本上:小心数组。 我忘记了这一点,因为java和C++的编程使我有点懒:在C++中,你没有得到一个索引xObjFunExtRebug,程序只是去你告诉它的任何内存位置,并相应地修改它。 如果幸运的话,当程序试图写入操作系统分配给它的位置之外的位置时,您会在那里遇到访问冲突错误。
如果您运气不好,它将修改属于它的内存的一部分,弄乱您声明的任何指针、变量或对象。

我知道这一个有点旧,并且不可能为这个特定问题提供解决方案,因为无法使用提供的代码重新创建它,但我最近遇到了类似的事情,我想我应该分享一些关于如何着手解决这个问题的一般性技巧

基本上:小心数组。 我忘记了这一点,因为java和C++的编程使我有点懒:在C++中,你没有得到一个索引xObjFunExtRebug,程序只是去你告诉它的任何内存位置,并相应地修改它。 如果幸运的话,当程序试图写入操作系统分配给它的位置之外的位置时,您会在那里遇到访问冲突错误。
如果您运气不好,它将修改属于它的内存的一部分,弄乱您声明的任何指针、变量或对象。

请发布一个可以编译和运行的完整测试用例。最重要的缺失信息是如何分配类型为
TestClass
的对象,但仅发布另一个片段表明这还不够。请发布一个可以编译和运行的完整测试用例。由于您的指针是公共的,您是否有可能在代码中的其他地方修改它们?你为什么不把它们设为私有的呢?我将添加我现在分配类的方式。我可以把变量私有化。但它肯定不会在其他地方被修改。这是编译的吗?声明没有
videoOut
像素的默认值。此代码不编译2。当编译被修复时,它不会出现所描述的问题。请发布一个完整的测试用例,可以编译并运行。最重要的缺失信息是如何分配类型为
TestClass
的对象,但仅发布另一个片段表明这还不够。请发布一个可以编译和运行的完整测试用例。由于您的指针是公共的,您是否有可能在代码中的其他地方修改它们?你为什么不把它们设为私有的呢?我将添加我现在分配类的方式。我可以把变量私有化。但它肯定不会在其他地方被修改。这是编译的吗?声明没有
videoOut
像素的默认值。此代码不编译2。当编译被修复时,它不会出现所描述的问题。我正在使用的代码涉及使用openframeworks,所以我不想混淆这个问题。我很确定这涵盖了我正在做的事情,但我会回顾一下,看看是否可以添加更多内容。@optician:如果出于某种原因不适合发布实际代码,那么发布代码也可以,但您发布的代码必须以同样的方式失败,否则就是浪费时间。您的权利,我只是将上面的代码复制到一个新的小项目中,它似乎做了我想做的事情!好的,回到绘图板或者其他问题。我正在使用的代码涉及到使用openframeworks,所以我不想混淆这个问题。我很确定这涵盖了我正在做的事情,但我会回顾一下,看看是否可以添加更多内容。@optician:如果出于某种原因不适合发布实际代码,那么发布代码也可以,但您发布的代码必须以同样的方式失败,否则就是浪费时间。您的权利,我只是将上面的代码复制到一个新的小项目中,它似乎做了我想做的事情!好,回到绘图板或其他问题。
#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); 
}