所以我在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()是在该类中的不同方法上完成的
我想在子函数中为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++中使用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++语言.我无法弄清楚有两个概念:
有人可以帮忙吗?
问题的原始标题和关于学习的主张说问题是关于C,而不是C++.但问题显然是关于C++,而不是C,因为每个问题中的两个项目中的一个在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)
在这两种情况下我都是对的吗?
我正在编写一个多线程应用程序,并希望传递指向结构的指针.
结构中的结构是否需要被malloced,或者如果外部结构是malloced,它会阻止内部结构在传递指针时被删除或丢失吗?
我问的结构是
struct thread_data
{
position starttile;
position destinationtile;
char *message;
};
Run Code Online (Sandbox Code Playgroud)
其中position是一个不包含指针的struct本身
我一直在努力了解这个程序的输出:
#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)
1 1 1
2 2 2
3 3 3
3 4 4
Run Code Online (Sandbox Code Playgroud)
有人可以解释输出吗?
为什么以下两个代码段不相等?
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) 我在一个看起来像这样的程序中读取一行时遇到了一些麻烦:
char* const *(*next) ();
Run Code Online (Sandbox Code Playgroud)
我认为next是一个指向函数的指针,该函数返回指向a的const指针char,但我仍然有点困惑.如果有人能够尽快回答这个问题!
好的,所以我正在制作一个基本的Win32控制台应用程序,它可以读取但更重要的是写入进程的内存.就像它附加到进程/ .exe上一样
所以说我有一个指针和一个偏移量,我将如何将数据写入指针/偏移量?
因此,例如动态地址是00A89BCA.指针为0x00EBCDB08,偏移量为0xBCD7
我想写一个整数值到这个地址.
我该怎么做呢?