标签: pointers

C的智能指针/安全内存管理?

我和其他许多人一样,使用智能指针在C++中包含不安全的内存操作,使用RAII等等,已经取得了巨大的成功.但是,当您具有析构函数,类,运算符重载等时,包装内存管理更容易实现.

对于使用原始C99编写的人,您可以在哪里指出(没有双关语)来帮助安全内存管理?

谢谢.

c memory pointers smart-pointers c99

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

&符号如何在c ++中起作用?

可能重复:
C++中指针变量和引用变量之间有什么区别?

这令我困惑:

class CDummy 
{
public:
   int isitme (CDummy& param);
};

int CDummy::isitme (CDummy& param)
{
  if (&param == this)
  { 
       return true; //ampersand sign on left side??
  }
  else 
  {    
       return false;
  }
}

int main () 
{
  CDummy a;
  CDummy* b = &a;

  if ( b->isitme(a) )
  {
    cout << "yes, &a is b";
  }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

在C&中通常表示var的地址.这是什么意思?这是指针符号的奇特方式吗?

我假设它的原因是一个指针表示法,因为这毕竟是一个指针,我们正在检查两个指针​​的相等性.

我正在从cplusplus.com学习,他们有这个例子.

c++ pointers reference ampersand

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

为什么cudaMalloc()使用指针指针?

例如, cudaMalloc((void**)&device_array, num_bytes);

之前已经过这个问题,回复是"因为cudaMalloc返回错误代码",但是我没有得到它 - 什么有双指针与返回错误代码有什么关系?为什么一个简单的指针不能完成这项工作?

如果我写

cudaError_t catch_status;
catch_status = cudaMalloc((void**)&device_array, num_bytes);
Run Code Online (Sandbox Code Playgroud)

错误代码将被放入catch_status,并返回一个指向分配的GPU内存的简单指针就足够了,不应该吗?

c c++ pointers cuda

43
推荐指数
3
解决办法
8676
查看次数

什么是悬垂指针?

我知道这是很常见的问题,但对我来说还是新的!

我不明白悬挂指针的概念,谷歌搜索,并编写测试方法找到一个.

我只是想知道这是一个悬垂的指针吗?无论我发现什么样的东西都回来了,我在这里尝试类似的东西!

谢谢!

void foo(const std::string name)
{
    // will it be Dangling pointer?!, with comments/Answer
    // it could be if in new_foo, I store name into Global.
    // Why?! And what is safe then?
    new_foo(name.c_str());
}

void new_foo(const char* name)
{
    // print name or do something with name...   
}
Run Code Online (Sandbox Code Playgroud)

c++ pointers dangling-pointer

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

如何使用JNA正确映射`MagImageScalingCallback`?

我在我的Java项目中使用jna.jar,jna-3.2.5.jar和jna-3.3.0-platform.jar.

这是我要复制的Winapi函数.

BOOL WINAPI MagImageScalingCallback(
  _In_  HWND           hwnd,
  _In_  void           *srcdata,
  _In_  MAGIMAGEHEADER srcheader,
  _Out_ void           *destdata,
  _In_  MAGIMAGEHEADER destheader,
  _In_  RECT           unclipped,
  _In_  RECT           clipped,
  _In_  HRGN           dirty
);
Run Code Online (Sandbox Code Playgroud)

这是我的Java代码

public interface MagImageScalingCallback extends StdCallLibrary.StdCallCallback{
    public boolean MagImageScalingCallback(HWND hwnd,
            Pointer srcdata,
            MAGIMAGEHEADER.ByValue srcheader,
            Pointer destdata,
            MAGIMAGEHEADER.ByValue destheader,
            RectByValue source,
            RectByValue clipped,
            HRGN dirty);
}
Run Code Online (Sandbox Code Playgroud)

当我进入这个回调方法时,我得到了意想不到的结果:

    public boolean MagImageScalingCallback(HWND hwnd, Pointer srcdata,
            MAGIMAGEHEADER.ByValue srcheader, Pointer destdata,
            MAGIMAGEHEADER.ByValue destheader, RectByValue source, RectByValue clipped, HRGN dirty) {
        image.setRGB(0, 0, srcheader.width, srcheader.height, srcdata.getIntArray(0, …
Run Code Online (Sandbox Code Playgroud)

java winapi pointers jna

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

在 C++ 中将 int 作为 bool 参数传递

有人可以解释一下这段代码中发生了什么:

这里的例子: https : //ideone.com/1cFb4N

#include <iostream>

using namespace std;

class toto
{
public:
    bool b;
    toto(bool x)
    {
        cout<< "constructor bool:" << (x ? "true": "false")<<endl;
        b = x;
    }
    ~toto() {}
};

int main()
{
    toto t = new toto(0);
    cout << "t.b is " << (t.b ? "true": "false")<<endl;
    t = new toto(false);
    cout << "t.b is " << (t.b ? "true": "false")<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

constructor bool:false
constructor bool:true
t.b is true
constructor bool:false
constructor …
Run Code Online (Sandbox Code Playgroud)

c++ constructor pointers boolean implicit-conversion

43
推荐指数
3
解决办法
4420
查看次数

我为什么不用*声明NSInteger

我正试着在iTunes U上从斯坦福大学开始学习iPhone课程,我对指针感到有些困惑.在第一次任务中,我尝试过做这样的事情

NSString *processName = [[NSProcessInfo processInfo] processName];
NSInteger *processID = [[NSProcessInfo processInfo] processIdentifier];
Run Code Online (Sandbox Code Playgroud)

这产生了一个错误,在盲目地修复之后,我发现它是导致问题的NSInteger系列中的*.

所以我显然不明白发生了什么.我将解释我认为它是如何工作的,也许有人会善意地指出这个缺陷.

与Web开发不同,我现在需要担心内存,而不是Web开发.因此,当我创建一个变量时,它会在某处分配一些内存(我假设是RAM).我没有传递变量,而是将指针传递给周围的内存.并且通过在变量名前加上*来声明指针.

假设我是对的,让我感到困惑的是为什么我不需要为NSInteger做那个?

cocoa pointers integer objective-c nsinteger

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

作为对象的类成员 - 指针与否?C++

如果我创建一个MyClass类并且它有一些私有成员说MyOtherClass,那么将MyOtherClass作为指针是否更好?将它作为存储在内存中的指针而不是指针也意味着什么?创建类时是否会创建对象?

我注意到QT中的示例通常在类成员时将类成员声明为指针.

问候

标记

c++ memory pointers class-design member

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

如何在C中打印变量地址?

当我运行此代码.

#include <stdio.h>

void moo(int a, int *b);

int main()
{
    int x;
    int *y;

    x = 1;
    y = &x;

    printf("Address of x = %d, value of x = %d\n", &x, x);
    printf("Address of y = &d, value of y = %d, value of *y = %d\n", &y, y, *y);
    moo(9, y);
}

void moo(int a, int *b)
{
    printf("Address of a = %d, value of a = %d\n", &a, a);
    printf("Address of b = %d, value of b …
Run Code Online (Sandbox Code Playgroud)

c pointers memory-address

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

将数据复制/扫描/读取到未初始化指针时发生崩溃或"分段错误"

这个问题可以作为所有常见问题的参考:

当我将数据复制/扫描到未初始化指针所指向的地址时,为什么会出现神秘崩溃或"分段错误"?

例如:

char* ptr;
strcpy(ptr, "hello world"); // crash here!
Run Code Online (Sandbox Code Playgroud)

要么

char* ptr;
scanf("%s", ptr); // crash here!
Run Code Online (Sandbox Code Playgroud)

c pointers segmentation-fault

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