你能告诉我-(NSObject *)obj和之间有什么区别
-(NSObject *obj)吗?
我在C中编写了这个函数:
void *PWNRetain(void *object) {
PWNObject *obj = (PWNObject *)object; // <-- looks stupid, I know :)
obj->retainCount++;
return obj;
}
Run Code Online (Sandbox Code Playgroud)
重要的是,它将返回与其参数相同的指针.是obj等于object,还是我做了另一个指针错误?谢谢.:)
当我写这段代码时:
Animal *p;
Animal b;
p = &b;
Run Code Online (Sandbox Code Playgroud)
在我创建指针的第一行.是创建Animal的新对象还是仅在编写第二行时?
谢谢.
我有两种方法来为指针创建实例.但其中一个会失败.
class A {
public:
int num;
};
void testPointer1(A* a){
a = new A();
a->num = 10;
}
A* testPointer2(){
A* a = new A();
a->num = 10;
return a;
}
void testPointer() {
A* a1 = NULL;
testPointer1(a1); // this one fails
//cout << a1->num << endl; // segmentation fault
A* a2 = NULL;
a2 = testPointer2();
cout << a2->num << endl;
}
Run Code Online (Sandbox Code Playgroud)
为什么testPointer1错了?
对于使用C++工作的装配专家来说,这是一个理论问题.我经常想要从函数中的局部变量返回一个字符串(char*或wchar*).如您所知,由于局部变量失去了范围,因此无法完成此操作.这让我很好奇,是否可以从函数中推送存储在此位置的数据?
让我说明一下:
char *IllegalFunc()
{
char *ret = "Hello World";
return ret; //warning: returning the adress of a local variable
}
//what we are attempting
char *IllegalAndMostlyIllogicalFunc()
{
char *ret = "Hello World";
__asm {
//somehow copy *ret to ESP and return
}
}
char *ARightWayToDoIt()
{
char *ret = new char[12];
strcpy(ret, "Hello World");
return ret;
}
Run Code Online (Sandbox Code Playgroud)
这只是为了好奇,我不会实际使用__asm方法...我可能只是声明一个静态char*所以我可以在c#中导入这样的函数
[dllimport(...)]
string IllegalFunc();
[dllimport(...)]
string ARightWayToDoIt(); //memory leak, I would need a FreeLastString() method
Run Code Online (Sandbox Code Playgroud) #include <iostream>
#include <vector>
using namespace std;
int main ()
{
vector <int> qwerty;
qwerty.push_back(5);
vector <int>* p = &qwerty;
cout << p[0]; //error: no match for 'operator<<' in 'std::cout << * p'
}
Run Code Online (Sandbox Code Playgroud)
我一般都不清楚如何使用带向量的指针,所以我很难解释为什么这不起作用.在我看来,这应该打印5屏幕.
我试图找出一个向量在已经"创建"一些之后如何添加更多对象,我的意思是:
int *ptr;
ptr = new int;
Run Code Online (Sandbox Code Playgroud)
如何使用它,你可以为该指针添加更多的对象吗?(把它变成一个数组)
谢谢!
我正在尝试创建一个将返回int的C函数,但在此过程中将填充作为变量传入的char*.我正在尝试的一个基本示例是:
int myMethod(int input, char* output, int outMaxLen) {
int outValue = input * 5;
if (out < 10) strcat(output, "A small number");
else if (out < 20) strcat(output, "A medium number");
else strcat(output, "A large number");
}
Run Code Online (Sandbox Code Playgroud)
在main.c中:
char* myMethodOutput;
int myMethodInt = myMethod(2, myMethodOutput, 15);
printf("%d %s", myMethodInt, myMethodOutput);
Run Code Online (Sandbox Code Playgroud)
运行时,整数显示在屏幕上,但文本不显示.
outMaxLen变量用于检查char*参数以确保它足够大以容纳输出字符串.
和strcat()一样,我尝试过strcpy()和strncpy(),但都无济于事.strcat()不向控制台显示任何文本,strcpy()和strncpy()使用消息EXC_BAD_ACCESS调用调试器.
我已经使用strcpy_s函数在Windows API中成功地管理了这个,但我现在正在尝试UNIX框.我可能错过了一些非常基本的东西!
我有一个vector<vector<Person*>*>*被调用的组(是的,我知道shared_ptr,但我不能在这个上下文中使用它们),另一个叫做partialGroups
无论如何,在方法结束时,我删除了所有内部向量,但不删除了人本身,因为我仍然希望它们有效,所以这里是代码的结尾:
// Deal with remaining partial teams
vector<Person*> *unsortable;
groups->push_back(unsortable);
// Remaining people
for(unsigned int i = 0; i < people.size(); i++) {
unsortable->push_back(people[i]);
}
// Remaining partial groups
for(unsigned int i = 0; i < partialGroups.size();i++) {
for(unsigned int j = 0; j < partialGroups[i]->size(); j++) {
unsortable->push_back(partialGroups[i]->at(j));
}
delete partialGroups[i];
}
return groups;
Run Code Online (Sandbox Code Playgroud)
然后我用这行代码调用该方法:
vector<vector<Person*>*> *currentMatch = sort(*people);
Run Code Online (Sandbox Code Playgroud)
我可以一直运行gdb到返回组; 声明,并查看数据结构,这很好.但是,当我退出该方法时,程序崩溃,堆栈跟踪显示它在向量析构函数本身中崩溃.
到底是什么导致了这个?它不应该是Person析构函数的问题,因为内部向量是指向人的指针.另外,取出删除行并没有什么区别.(是的,我知道它会留下内存泄漏,但它可能有助于诊断问题).
谢谢.
编辑:此外,错误是一个sigabrt
pointers ×10
c++ ×6
c ×3
vector ×2
add ×1
assembly ×1
c-strings ×1
destructor ×1
iphone ×1
new-operator ×1
objective-c ×1
string ×1
struct ×1
variables ×1