如果我做了以下事情,这会导致内存泄漏吗?
SomeClass* tmp;
NSDate* thetmpdate;
tmp = [[[SomeClass alloc] init] autorelease];
thetmpdate = [NSDate date];
// Do something long with tmp and date
tmp = [[[SomeClass alloc] init] autorelease];
thetmpdate = [NSDate date];
// Do something long with tmp and date
tmp = [[[SomeClass alloc] init] autorelease];
thetmpdate = [NSDate date];
// Do something long with tmp and date
Run Code Online (Sandbox Code Playgroud) 如果我有以下例子:
int *x;
x = func(a);
Run Code Online (Sandbox Code Playgroud)
对于声明:x = func(a);,我们是否说我们要回复一个地址x?或者,我们究竟如何阅读它?
编辑:是否有资格说我们正在返回指针x?如果是这样,你能解释一下这是如何完成的吗?我的意思是,我们如何返回指针?
我有一个数据集raw.data.2010,需要几个步骤与不同的动物物种进行子集化.我还需要在每个过滤过程后相应地命名它们.我写了一个简单的代码如下:
#Creating reproducible data######
site=rep(list("Q", "R", "S", "T"), each=500)
grid=sample(1:2, size=2000, replace=TRUE)
spp=rep(list("A", "B", "C", "D", "E"), each=400)
fate=sample(1:5, size=20000, replace=TRUE)
sex=rep(list("M","F"), each=2000)
weight=sample(85:140, size=2000, replace=TRUE)
raw.data=as.data.frame(cbind(site, grid, spp, fate, sex, weight))
### main codes#####
spp=c("A", "B", "C", "D", "E")
for (i in spp){
name=paste(i, "raw", sep=".", collapse="")
filter=paste("select",i, sep="", collapse="")
assign(filter, raw.data$spp==i)
assign(name, raw.data[get(filter),])
}
Run Code Online (Sandbox Code Playgroud)
我检查过滤器,他们没有问题.但是最后一行不起作用,所以我调用的所有子集化数据都返回了NA.哪里错了?谢谢.
编辑:嗨,谢谢大家的意见.我编辑了我的代码,所以它是可重复的.基本上我想首先过滤我raw.data的spp.然后,我可以继续按照加入更多的过滤器将它们分组site,grid,fate...等等.我需要能够单独访问过滤后的数据,以便我可以操作它们供以后使用,例如.计算不同性别或年龄组的体重和其他测量值.我希望能够打电话A.raw,A.Q.data后来.
因为我想分析不同级别的数据(例如人口级别,个人级别,站点/网格级别),并能够根据我的需要对其进行汇总/拆分.这就是这段代码的目的.希望我的解释不会让你感到困惑.
我观察到以下行为.
取了两个属性变量.
@property (nonatomic, retain) NSString *stringOne;
@property (nonatomic, assign) NSString *stringTwo;
Run Code Online (Sandbox Code Playgroud)
在.m文件中写下代码..
NSMutableString *localstring= [[NSMutableString alloc] initWithString:@"test"];
self.stringOne = localstring;
NSLog(@"localstring = %d", [string retainCount]);
NSLog(@"string one retain count = %d", [self.stringOne retainCount]);
self.stringTwo = localstring;
NSLog(@"localstring = %d", [localstring retainCount]);
NSLog(@"string two retain count = %d", [self.stringTwo retainCount]);
Run Code Online (Sandbox Code Playgroud)
由于alloc,localstring保留计数为1.现在我给了self.stringOne = localString.
由于stringOne的retain属性,localstring的保留计数将变为2.现在我给了self.stringTwo = localString.
即使在这里,localstring保留计数也会增加1.请注意,我已将assign属性赋予stringTwo.实际上,localstring或stringTwo的保留计数不应该增加1,因为它是assign属性.如果我错了,请纠正我.
谢谢Jithen
我有一个结构:
struct Handle
{
public:
const unsigned long Id;
const std::type_index Index;
Handle() : Id(-1), Index(std::type_index(typeid(Event))){}
Handle(unsigned long id, std::type_index index) : Id(id), Index(index) {}
};
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将它分配给我得到的变量时
错误10错误C2582:'eventHandler :: Handle'中的'operator ='函数不可用
为什么?(我正在使用结构,因为据我所知,它们作为数据类型处理,可以从函数返回而不用new创建.这是正确的吗?)
我NA在表中有正,负和值,我需要用值替换负值NA.正数和NA值应保持在表中.我的数据集类似于下面的数据集:
NO. q
1 NA
2 NA
3 -133.6105198
4 -119.6991209
5 28.84460104
6 66.05345087
7 84.7058947
8 -134.4522694
9 NA
10 NA
11 73.20465643
12 -69.90723514
13 NA
14 69.70833003
15 65.27859906
Run Code Online (Sandbox Code Playgroud)
我试过这个:
if (q>0) {
q=NA
} else {
q=q
}
Run Code Online (Sandbox Code Playgroud) 我用Java开发了几年,现在我想学习C,我注意到了一些差异.
在Java中,当我想从函数返回一些东西时(例如,我会写的读取用户输入)
String s;
s = new Scanner(System.in).nextLine();
Run Code Online (Sandbox Code Playgroud)
在CI会写
char s[20];
scanf("%d", name);
Run Code Online (Sandbox Code Playgroud)
区别在于,在Java中,函数返回一个可以直接赋值给变量的值,而在C中,函数将变量名称作为参数(分别是指向变量的指针).
我注意到了许多C函数.当我编写自己的函数时,我应该像在Java中习惯一样,还是应该使用从函数中赋值/返回值的C风格?
我试图使用g ++ 5.1编译和执行这个小的c ++代码,它编译得很好,当我执行它时,linux我得到这个错误消息:" Segmentation fault (core dumped)".
但是相同的代码在osx上正确运行但在linux上没有运行:
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
struct node {
std::string data;
};
int main() {
struct node * node = (struct node * )
malloc(sizeof(struct node));
node->data.assign("string");
// node->data = "string" --> same issue
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我尝试了一个简单的assigne(node-> data ="string"),但我遇到了同样的问题请帮忙!
我有一堂课:
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
Run Code Online (Sandbox Code Playgroud)
打印LinkedList的函数是:
public static void printLinkedNode(ListNode l){
while(l != null){
System.out.print(l.val+" ");
l = l.next;
}
System.out.println(" ");
}
Run Code Online (Sandbox Code Playgroud)
在我的主要功能中,我创建了一个名为test的ListNode:
ListNode test = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
Run Code Online (Sandbox Code Playgroud)
如果我做答:
ListNode fast = head, slow = head;
fast = fast.next.next;
printLinkedNode(head); // I get 1->2->3->4
Run Code Online (Sandbox Code Playgroud)
如果我做B:
ListNode fast = head, slow = head;
fast.next = fast.next.next;
printLinkedNode(head); …Run Code Online (Sandbox Code Playgroud) 我实现了一个类来处理一些外部功能(例如,另一个DLL的功能)。这个函数给了我一个可以用作句柄的整数。这是我的代码的重要部分:
MyClass
{
public:
MyClass() {
handle = getHandlefromExternalFunction();
}
~MyClass {
if(handle>0)
freeHandleFromExternalFunction(handle);
}
MyClass& operator=(MyClass& other) {
freeHandleFromExternalFunction(handle);
handle = other.handle
other.handle = 0; //Is this a bad idea?
}
private:
int handle;
}
Run Code Online (Sandbox Code Playgroud)
在我的主要功能中,我有一个myClass对象。在某些时候,我正在使用赋值运算符来更改对象的值:
MyClass object;
//some code
object = MyClass();
Run Code Online (Sandbox Code Playgroud)
分配后,创建的对象MyClass()将立即销毁,因为它超出了范围。但是我不想freeHandleFromExternalFunction()被调用handle,因为我在分配的对象中使用它。因此,我在赋值运算符中更改了赋值对象的值handle = 0。我的问题是:这是个坏主意吗?有谁能更好地解决我的问题?
assign ×10
c++ ×4
java ×2
pointers ×2
r ×2
allocation ×1
autorelease ×1
c ×1
conditional ×1
destructor ×1
function ×1
ios ×1
iphone ×1
memory ×1
memory-leaks ×1
missing-data ×1
objective-c ×1
retain ×1
return ×1
struct ×1
subset ×1