C++ 指针无缘无故更改值c++;
我试图将指针存储为成员变量,以便在类的生命周期中,其他函数可以使用指针 但是,当我第一次设置这个类时,指针变量对于第一个printf是正确的,但是当调用第二个printf时,值是0x0 在我的main中,首先调用一次setup,然后重复调用update 成员变量在h文件中声明 为什么指针在第一个和第二个printf之间变化 //主要//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
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);
}