标签: memory-management

如何使用C释放二叉树?

我写了一个二叉搜索树,它工作正常,但我不确定我的程序是否释放了所有的记忆.

这是我对树节点的定义

typedef struct node  {
    int val;
    struct node *left, *right;
} nodeOfTree;
Run Code Online (Sandbox Code Playgroud)

我写这个函数来输出结果并释放所有节点,似乎答案是正确的但是记忆没有被释放.

void outputAndDestroyTree(nodeOfTree *root)  {
    if (!root) {return;}
    outputAndDestroyTree(root->left);
    printf("%d ", root->val);
    outputAndDestroyTree(root->right);
    free(root);      // I free this pointer, but after doing that, I can still access this  pointer in the main() function
}
Run Code Online (Sandbox Code Playgroud)

这是否意味着我无法在递归函数中释放一段记忆?谢谢~~~~~

更新:谢谢大家〜

c memory-management

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

在没有ARC的情况下,我需要在iOS中释放内存?

我有一个方法,不要使用ARC:

-(void)readAppPlist
{
    NSString *plistPath = [self getDataFileDestinationPath];
    NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath];
    NSString *errorDesc = nil;
    NSPropertyListFormat format;
    NSMutableDictionary *temp = (NSMutableDictionary *) [NSPropertyListSerialization propertyListFromData:plistXML mutabilityOption:NSPropertyListMutableContainersAndLeaves format:&format errorDescription:&errorDesc];
    if (!temp) {
        NSLog(@"Error reading plist: %@, formatL %d", errorDesc, format);
    }
    items = [[temp objectForKey:@"Items"] mutableCopy];
}
Run Code Online (Sandbox Code Playgroud)

根据内存管理规则,我需要为变量plistPath,plistXML,errorDesc,temp释放内存?我应该另外一个方法,在这里发布它们或者只是将它们放入这个类的dealloc全局方法中吗?

memory-management objective-c ios

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

对单例方法的多线程调用会影响局部变量吗?

我创建了一个具有多个方法的类,这个类可以只有单个实例,就像单例行为和没有任何实例变量的类一样.

现在我很困惑,如果对单个方法的多次调用将给出预期结果,如果该方法只有多个线程影响的参数?
Bcoz的方法是在堆栈中一次分配内存,然后同时线程调用方法,结果是什么?

java methods memory-management

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

释放目标C中的对象

我只需要一些关于内存管理的帮助.我在屏幕上显示大约500帧.我的应用程序似乎在模拟器上正常运行,但在iPad上显示大约450帧后崩溃.问题似乎是因为内存不足而来.以下是我的代码的一部分.我是否正确地释放了这些物体,还是我需要做更多的事情?

- (void)drawBufferWidth:(int)width height:(int)height pixels:(unsigned char*)pixels
{
     CGRect rect = CGRectInset(self.view.bounds, 0.0, 0.0);
     UIImageView *img = [[UIImageView alloc] initWithFrame:rect];
     CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
     CGContextRef gtx = CGBitmapContextCreate(pixels, width, height, BitsPerComponent, BytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast);
     CGImageRef myimage = CGBitmapContextCreateImage(gtx); 
     img.image = [UIImage imageWithCGImage:myimage];

     CGContextRelease(gtx);
     CGImageRelease(myimage);
     CGColorSpaceRelease(colorSpace);
}
Run Code Online (Sandbox Code Playgroud)

memory-management objective-c ios

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

calloc(),malloc()vs new-ing一个内部有unordered_map的结构

我正在创建一个结构,其中的字段是堆上的unordered_map.当我使用new时,我可以毫无问题地添加它.但是使用calloc,我得到一个插入错误,因为桶大小为0.我调用reserve后工作正常.

那么,当在结构上调用calloc时,unordered_map构造函数不会运行吗?我很困惑为什么如果它在一个新版本的结构中,它似乎具有非零桶大小.除了召唤预备队之外,还有更好的方法吗?(在这种情况下我不能使用删除,所以我需要坚持使用calloc调用)

c++ malloc memory-management calloc

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

非主题分配和内存泄漏问题

我有一个房产说

@property(nonatomic,assign) NSString *str;
Run Code Online (Sandbox Code Playgroud)

现在我有类似的东西

self.str = [[NSString alloc] init];
self.str = @"test";
NSLog(@"%@",str);
[self.str release];
Run Code Online (Sandbox Code Playgroud)

当我跑步时,我可以看到泄漏"潜在的记忆泄漏".

为什么它让我泄露?

请指导我,我倾向于iOS的阶段

memory-management objective-c ios

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

为什么在使用setter将自定义对象分配给实例变量时使用自动释放?

我想将自定义对象分配给实例变量.

这是代码:
- MyController.h/.m

#import "CustomData.h"  
@interface MyViewController : NSViewController  
@property (retain) CustomData* theData;  

- (void)aRandomMethod; 

@end

@implementation MyViewController  
@synthetize theData;  

- (void)aRandomMethod {  

   NSData* rawData = [someOtherObject someOtherMethod];

   // option 1
   self.theData = [[CustomData alloc] initWithData:rawData];

   // option 2
   CustomData* _theData = [[Custom alloc] initWithData:rawData];

   // option 3
   self.theData = [[[CustomData alloc] initWithData:rawData] autorelease];

   // option 4
   theData = [[CustomData alloc] initWithData:rawData];

   // ... later code calls some methods on theData or _theData, not useful here.
 }
@end
Run Code Online (Sandbox Code Playgroud)

当在Xcode中运行Analyze功能时,它告诉我,对于选项1和2,有一个"泄漏的对象未被引用...",但是对于3和4没有.看来我 …

macos memory-management objective-c

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

在哪里分配一次使用类?

让我们考虑以下代码:

void main(int argc, char* argv[])
{
Foo foo;
//at this point I don't need foo any more
//a lot of stuff here
}
Run Code Online (Sandbox Code Playgroud)

如果我只需要foo很短的时间,那么在执行其余代码之前将它分配到堆上并删除是不是更好?

c++ memory-management

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

使用list class和push_back的C++内存泄漏

使用list class和push_back的C++内存泄漏

void EMAdd(int n)
{
   list<Employee*> em;
   for (int i = 1; i <= n; i++)
      em.push_back(new Employee());
}
Run Code Online (Sandbox Code Playgroud)

Q1.最后,类列表的析构函数会自动删除em的节点吗?

Q2.但为什么这个功能仍有内存泄漏?

谢谢,谢谢你的回答!

c++ destructor memory-leaks memory-management vector

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

物理地址扩展是否需要36位地址总线?

32位处理器上的物理地址扩展是否需要36位地址总线?如果我使用位于具有36位地址的页面中的32位地址怎么办?

x86 assembly memory-management bus

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