相关疑难解决方法(0)

C++是否可以确定指针是否指向有效对象?

我正在学习C++并阅读C++ Primer.有一个问题我想知道答案:

给定指针p,您可以确定p是否指向有效对象?如果是这样,怎么样?如果没有,为什么不呢?

谢谢.

c++ pointers

27
推荐指数
3
解决办法
3万
查看次数

如何检查指针是否有效?

我很清楚这个问题的丑陋,我还是想知道它是否可能:

当程序尝试读取/写入无效指针(NULL,未分配的块等)时,窗口会使应用程序崩溃并发生访问冲突异常.

问题是,有没有办法检查这个指针在尝试使用它之前会产生异常,否则,有没有办法捕获这个异常?

c winapi pointers

21
推荐指数
5
解决办法
5万
查看次数

如何测试值是否(或不是)有效指针?

对于C dode的单元测试,我想确定作为a传递的值void *确实是一个有效的指针.

我不认为我可以证明它肯定是一个有效的指针,但我怎么能说它可能是?或者绝对不是

我正在64位英特尔处理器上进行开发和单元测试,目标是ARM 9.我不反对汇编器插件.

  • 是否有有效指针的最小值?0x08看起来不是指针,上面的值0x1000000是多少.
  • 它必须能被某些东西整除(比如8)吗?
  • 我可以100%确定地说奇数不是有效指针吗?

我不需要一个完美的答案,只需要捕捉大多数错误.


[更新]我正在考虑查看链接地图,虽然这看起来有点矫枉过正.在转换为删除编译器时,会出现问题.一些系统调用需要一个char *void *,并且csting那些掩盖了一些编码错误.

c pointers

9
推荐指数
0
解决办法
145
查看次数

最有效的替代IsBadReadPtr?

我有一些Visual C++代码接收指向缓冲区的指针,该缓冲区包含需要由我的代码处理的数据和该缓冲区的长度.由于我的控制之外的错误,有时这个指针未初始化我的代码或者不适合阅读(即当我尝试访问缓冲区中的数据时它会导致崩溃.)

所以,我需要在使用它之前验证这个指针.我不想使用IsBadReadPtr或IsBadWritePtr,因为每个人都认为他们是错误的.(谷歌他们的例子.)他们也不是线程安全的 - 在这种情况下可能不是一个问题,虽然线程安全的解决方案会很好.

我已经看到了通过使用VirtualQuery实现这一点的建议,或者只是在异常处理程序中执行memcpy.但是,需要进行此检查的代码是时间敏感的,因此我需要最有效的检查,这也是100%有效.任何想法,将不胜感激.

为了清楚起见:我知道最好的做法是只读坏指针,让它引起异常,然后追溯到源并修复实际问题.但是,在这种情况下,坏指针来自我无法控制的Microsoft代码,所以我必须验证它们.

另请注意,我不关心指向的数据是否有效.我的代码正在寻找特定的数据模式,如果没有找到它们将忽略它们.我只是想防止在对这些数据运行memcpy时发生崩溃,并且在尝试memcpy时处理异常需要在我的代码中更改十几个地方(但如果我有像IsBadReadPtr这样的东西来调用我只会必须在一个地方更改代码).

c++ memory windows visual-c++

8
推荐指数
3
解决办法
1万
查看次数

检查C++中的值定义

我正在使用C++,我需要知道标量值(例如a double)是否"已定义".如果需要,我还需要能够"取消"它:

class Foo {
public:
    double get_bar();

private:
    double bar;
    void calculate_bar() {
        bar = something();
    }
};

double Foo::get_bar() {
    if ( undefined(bar) )
        calculate_bar();
    return bar;
}
Run Code Online (Sandbox Code Playgroud)

在C++中有可能吗?

谢谢

c++ undef

6
推荐指数
2
解决办法
9643
查看次数

检查C++中的指针定义

如何检查变量,特别是指针是否在C++中定义?假设我有一个班级:

class MyClass {  
public:

    MyClass();

    ~MyClass() {
        delete pointer; // if defined!
    }

    initializePointer() {
        pointer = new OtherClass();
    }

private:

    OtherClass* pointer;

};
Run Code Online (Sandbox Code Playgroud)

c++ pointers

4
推荐指数
3
解决办法
2万
查看次数

C++:验证指针?

可能重复:
测试有效性指针(C/C++)

如果我有一个指针,char* foo有没有办法确定是否foo指向内存中的有效位置?(所以,foo不是NULL,而且delete尚未被召唤.)

c++ validation pointers memory-management

4
推荐指数
2
解决办法
1485
查看次数

C++中如何判断传入的缓冲区是否有效?

在我的函数中,内存指针及其大小作为参数传递:

int myFun(uintptr_t* mem_ptr, int mem_size) {
    // Code here
}
Run Code Online (Sandbox Code Playgroud)

有没有办法判断这块内存是否真的有效?

(操作系统是 CentOS Linux 版本 7.9.2009。)

c++ pointers memory-safety

2
推荐指数
1
解决办法
266
查看次数

如何检查内存是否已初始化?

有没有办法检查指针指向的内存是否已初始化?(不一定是我的程序).
谢谢

c++ pointers

1
推荐指数
1
解决办法
1153
查看次数

C++ - 检查指针是否指向有效内存(此处不能使用NULL检查)

我正在创建脚本语言.当我分配东西时,它会分配东西并返回地址然后我对它做任何事情然后删除它.我无法控制变量,比如在我的lang中创建struct(使用指针和bool来检查指针是否指向有效数据)等等因为它会让我的RAM在RAM中变得更慢更大.

例如:(我的脚本语言很容易被理解.我怀疑你不会理解这一点,但无论如何我会在其中加入一些评论)

MyStruct = { //Function. For create object with it use 'new' before it.
    TestAliveVar=0
}
Func = { //I'll explain what exactly this function does every place it runs.
    if (!exists(arg0)) //C++: ???
        exit;
    arg0.TestAliveVar=1
    println "Still alive!";
}
var MyVar=new MyStruct(); //Returns address of the new object in the heap
                          //and runs on it the `MyStruct` function.
Func(MyVar);              //Sets his 'TestAliveVar' to 1
                          //and prints 'Still Alive!' with new line
delete(MyVar);            //C++: free(MyVar);
Func(MyVar);              //Does nothing
Run Code Online (Sandbox Code Playgroud)

问题是如何创建 …

c++ null interpreter pointers

1
推荐指数
2
解决办法
1万
查看次数

用于在使用前验证指针的API

可能重复:
测试有效性指针(C/C++)

是否有任何简单的Win32 API来检查指针在用于写入操作之前是否指向有效的内存位置?

c++ winapi

0
推荐指数
1
解决办法
585
查看次数