我很想知道如何malloc分配内存(你能告诉我吗?),所以我试了一下.
这是分配内存的坏方法吗?
void* myMalloc(unsigned int size) {
return (void*) new bool[size];
}
Run Code Online (Sandbox Code Playgroud) 我需要释放下面的指针,如何释放画布,油漆和矩阵的内存?
Canvas pcanvas = new Canvas();
Paint mPaint = new Paint();
Matrix matrix = new Matrix();
Run Code Online (Sandbox Code Playgroud)
提前致谢.
我看过这个 -
当程序终止时,将释放由malloc(例如)分配并且未使用free()函数释放的内存.并且它由opearting系统完成.那么什么时候有或没有垃圾收集器进入图片?
或者是并非所有操作系统都在程序终止时自动释放内存?
如果我正在搞乱XCode并尝试学习Objective-C,如果我经常忘记释放对象,它是否对我的系统造成任何威胁?不释放物体的真正后果是什么?如果我重新启动计算机,这些内存泄漏会持续存在吗?
我主要搞乱NSStrings和NSTimers以及类似的东西,没什么大不了的.我只是担心它弄乱了我的电脑.
有没有办法检查是否有未发布的对象?如果他们想检查一堆代码以查看是否存在任何这些内存泄漏,该怎么办?
我正在为Quartz Composer定制补丁的最后润色.截至目前,我几乎所有内容都被删除了补丁,当我尝试NSLog NSDictionary值为ivar时,它崩溃告诉我BAD ACCESS,并且当我分配它时,它在上次执行时完美运行.
我的代码看起来像这样:
- (BOOL) startExecution:(id<QCPlugInContext>)context
{
lastBoutData = [[NSDictionary alloc] init ];
return YES;
}
- (BOOL) execute:(id<QCPlugInContext>)context atTime:(NSTimeInterval)time withArguments:(NSDictionary*)arguments
{
NSLog(@"self.inputBoutData: %@", self.inputBoutData);
NSLog(@"lastBoutData: %@", lastBoutData);
// have new data, put it on the output
self.lastBoutData = [NSDictionary dictionaryWithDictionary:self.inputBoutData];
NSLog(@"assigned: %@", lastBoutData);
return YES;
}
Run Code Online (Sandbox Code Playgroud)
我可以看到日志显示所有三个NSLog行完美地工作,直到self.inputBoutData输入.然后,我看到self.inputBoutData被成功复制到循环的最后一个NSLog行中的lastBoutData.
在下一次执行run:atTime:withArguments:中,self.inputBoutData仍然是满的,但lastBoutData再次为空!我不明白这是怎么回事.然后,它运行一个循环,就像最后一个循环一样,并成功将self.inputBoutData复制到lastBoutData,然后再次记录它.下一次,我在第二次NSLog语句之前得到了BAD ACCESS.
我收到一些错误消息,告诉我lastBoutData不是NSDictionary,所以出于绝望,我添加了[lastBoutData retain],并且它没有崩溃.我没有发布这种伊娃,所以我不确定为什么要保留它.在许多其他补丁中我和其他ivars做的事情非常相似,没有任何问题.我能错过什么?为什么这件事在我身上释放,或者甚至发生了什么?
如果我尝试向我的CUDA设备发送一个比可用内存大的结构,那么CUDA会给我任何警告或错误吗?
我问这是因为我的GPU有1024 MBytes(1073414144字节)全局内存总量,但我不知道应该如何处理和最终的问题.
那是我的代码:
#define VECSIZE 2250000
#define WIDTH 1500
#define HEIGHT 1500
// Matrices are stored in row-major order:
// M(row, col) = *(M.elements + row * M.width + col)
struct Matrix
{
int width;
int height;
int* elements;
};
int main()
{
Matrix M;
M.width = WIDTH;
M.height = HEIGHT;
M.elements = (int *) calloc(VECSIZE,sizeof(int));
int row, col;
// define Matrix M
// Matrix generator:
for (int i = 0; i < M.height; i++)
for(int j = 0; …Run Code Online (Sandbox Code Playgroud) 我知道Windows 32位允许任何进程大约2千兆字节的内存地址空间.2千兆字节= 2147483648字节.我试图分配堆内存超过2147483648字节,我没有看到任何错误或异常,这个代码:
# include<iostream>
int main(){
void *x=malloc(2147489999);
free(x);
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
是什么原因?
我创建了一个双链表类,并尝试将它与我创建的Vector类一起使用,以便创建链接列表的向量,但是在程序结束时,我似乎得到一个错误
malloc: *** error for object 0x100100be0: pointer being freed was not allocated
,我假设已经与析构函数有关,也就是Xcode指向我的地方.我该如何规避这个?我认为我的析构函数工作正常,但我想我错了.
测试文件:
#include <iostream>
#include <string>
#include "Vector.h"
#include "doubleLL.h"
using namespace std;
int main (int argc, const char * argv[])
{
Vector<double_llist<string> > listWords(27);
double_llist<string> numbers;
numbers.push_back("one");
numbers.push_back("two");
numbers.push_back("three");
listWords[0] = numbers;
listWords[0].print();
}
Run Code Online (Sandbox Code Playgroud)
doubleLL.h:
#ifndef DOUBLELL_H
#define DOUBLELL_H
#include <iostream>
using namespace std;
template <class T>
class double_llist {
private:
struct node {
T data;
node* prev;
node* next;
node(T t, node* p, node* n) …Run Code Online (Sandbox Code Playgroud) 假设我有一个对象,其目的是为对象类型MyObject保存一堆指针,并且假设我想要一个将新的MyObjects添加到集合中的函数,如下所示:
void MyCollection::addObject(){
MyObject *newObject = new MyObject();
MyCollection.add(mycollection, newObject);
}
Run Code Online (Sandbox Code Playgroud)
让我们说MyCollection.add接受一个特定的集合对象和一个指针,并以某种方式在内部存储它.但是这个函数的问题是当newObject本身是持久的时,*newObject指针在函数调用之后被销毁,所以add()函数不再有一个真正指向该对象的指针.是否有任何好方法以某种方式制作持久性指针?
谢谢
有没有垃圾收集对象的方法?据我所知finalize(),如果有任何对象要收集垃圾,就会被调用.
c++ ×3
c ×2
malloc ×2
memory ×2
objective-c ×2
android ×1
cuda ×1
destructor ×1
ivar ×1
java ×1
memory-leaks ×1
nsdictionary ×1
pointers ×1
retain ×1
windows ×1
xcode ×1