标签: pointers

成对指针的c ++向量搞砸了

所以我在c ++中有一对指针的向量:

vector<pair<Move *,Piece *> > moveList;
Run Code Online (Sandbox Code Playgroud)

其中Move是一个对象而Piece是一个对象...... Piece具有类变量类型和侧面

所以我向moveList添加东西:

    pair <Move *, Piece *> pr (&m,&(p));


    moveList.push_back(pr);
Run Code Online (Sandbox Code Playgroud)

其中m是Move对象,p是Piece对象

但每当我调用moveList.back()方法时,由于某种原因它会修改Piece的值

所以我这样做

Move * j = moveList.back().first;
Run Code Online (Sandbox Code Playgroud)

Piece应将其"type"变量的值设置为"X"

但是当我调试时,事实证明,在上面一行之后,由于某种原因,Piece的"类型"变量的值被设置为一些疯狂的数字,例如-56'\ 310'......

我究竟做错了什么?

编辑

moveList也被设置为类变量

并且推送到moveList和获取moveList的back()是在该类中的不同方法上完成的

c++ pointers reference vector

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

在子功能中分配CFString

我想在子函数中为CFString分配空间.像这样的东西:

void fun(CFStringRef *ref)
{
    ref = CFStringCreateWithCString(NULL, "hi", kCFStringEncodingUTF8);
}

int main(void)
{
    CFStringRef ref;
    fun(&ref);

    CFShow(ref);

    if(ref) CFRelease(ref);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它确实编译了警告,不打印"hi".这有什么不对?

编辑:添加CFRelease()

c++ pointers

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

C++中的多重映射

我想在C++中使用multimaps.主要目的是存在一个存储多图指针的地图.

现在,当我尝试插入多图时,我遇到了问题.有人能告诉我哪里出错了.

typedef multimap<int,int> mm;
typedef map<int,mm*> v_map;

int main()
{
v_map map1;

v_map::iterator it;
it = map1.find(23);

mm *mm_map_pointer;

if( it == map1.end())
  {
   mm m_map1; 
   map1[23] = &m_map1;
   mm_map_pointer = &m_map1;
  }
else
 {
   mm_map_pointer = it->second; 
 }

mm_map_pointer->insert( pair<int, int>(1, 2));
return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题出在mm_map_pointer-> insert(pair(1,2)); 有人可以帮忙吗?

c++ pointers map multimap

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

C++语言中的两个问题

我正在学习C++语言.我无法弄清楚有两个概念:

  1. new和malloc有什么区别?
  2. 指针和引用有什么区别?

有人可以帮忙吗?


问题的原始标题和关于学习的主张说问题是关于C,而不是C++.但问题显然是关于C++,而不是C,因为每个问题中的两个项目中的一个在C中不作为相关概念存在.

c++ pointers

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

这些C指针操作会导致问题吗?

让我说我得到了:

char *p = NULL;
Run Code Online (Sandbox Code Playgroud)

我确定这个会出现问题,因为我要取消引用一个NULL指针:

*p = 16;
Run Code Online (Sandbox Code Playgroud)

另一方面,我认为这个可以,因为我得到*p的地址NULL本身不是:

char **pp = &p;
Run Code Online (Sandbox Code Playgroud)

在这两种情况下我都是对的吗?

c theory pointers lvalue dereference

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

指向包含结构的struct的指针

我正在编写一个多线程应用程序,并希望传递指向结构的指针.

结构中的结构是否需要被malloced,或者如果外部结构是malloced,它会阻止内部结构在传递指针时被删除或丢失吗?

我问的结构是

struct thread_data
{
    position starttile;
    position destinationtile;
    char *message;
};
Run Code Online (Sandbox Code Playgroud)

其中position是一个不包含指针的struct本身

c pointers thread-safety

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

输出说明:复杂的指针算术

我一直在努力了解这个程序的输出:

#include <stdio.h>    
int main(){
    static int arr[] = {0, 1, 2, 3, 4};
    int *p[] = {arr, arr+1, arr+2, arr+3, arr+4};
    int **ptr = p;

    ptr++;
    printf("%d %d %d\n", ptr-p, *ptr-arr, **ptr);
    *ptr++;
    printf("%d %d %d\n", ptr-p, *ptr-arr, **ptr);
    *++ptr;
    printf("%d %d %d\n", ptr-p, *ptr-arr, **ptr);
    ++*ptr;
    printf("%d %d %d\n", ptr-p, *ptr-arr, **ptr);    

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

OUTPUT

1 1 1
2 2 2
3 3 3
3 4 4
Run Code Online (Sandbox Code Playgroud)

有人可以解释输出吗?

c pointers

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

增加C++中的指针

为什么以下两个代码段不相等?

void print (char* s) {
  if (*s == '\0')
     return;
    print(s+1);
   cout << *s;
}

void print (char* s) {
  if (*s == '\0')
     return;
    print(++s);
   cout << *s;
}
Run Code Online (Sandbox Code Playgroud)

c++ pointers

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

关于const语法的困惑

我在一个看起来像这样的程序中读取一行时遇到了一些麻烦:

char* const *(*next) ();
Run Code Online (Sandbox Code Playgroud)

我认为next是一个指向函数的指针,该函数返回指向a的const指针char,但我仍然有点困惑.如果有人能够尽快回答这个问题!

c pointers const function

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

如何将数据写入进程/内存?

好的,所以我正在制作一个基本的Win32控制台应用程序,它可以读取但更重要的是写入进程的内存.就像它附加到进程/ .exe上一样

所以说我有一个指针和一个偏移量,我将如何将数据写入指针/偏移量?

因此,例如动态地址是00A89BCA.指针为0x00EBCDB08,偏移量为0xBCD7

我想写一个整数值到这个地址.

我该怎么做呢?

c++ console winapi pointers offset

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