每个“块”的记忆已经有一个唯一的地址,否则就没有方法可以单独的内存块。在80×86建筑,那块的大小是一个字节,这意味着我们可以解决单个字节。0地址是用来指“不指向任何东西”。
2)我的理解是,程序/存储系统保持跟踪你的阵列有多大(我不知道这是如何发生的幕后)。在任何情况下,你删除数组时,它已经知道如何删除。迫使程序员指定金额会是多余的,导致overspecification错误(假如程序员分配了10个字节,然后试图删除8?)
我看到一对夫妇的事情不在这里。首先,在你的构造函数,你指定顶点=绿色;你会假设这将传入的元素,但它不行,它会简单地设置顶点指向的元素。
这是自找麻烦。如果用户通过在一个非动态分配的顶点数组,你最终将与顶点的指针指向一个局部变量,最终会超出范围。当它,和你试图访问它,你的程序会崩溃。
相反,它是分配一个新的动态顶点数组里面你更安全,然后拷贝构造函数的顶点分别(循环的使用)。这样,你能保证你的顶点将坚持即使用户通过在已非动态分配的顶点。
第二,要知道为什么add()崩溃,只是逐句通过代码时的顶点是非空的(这是当你调用上面的构造函数):
在这种情况下,如果条件为真,所以有条件的执行。它不会复制顶点!所以当你删除顶点,你也删除什么TMP是指向。因此,在有条件的,TMP是指向垃圾。因此,在有条件的,TMP是指向垃圾。TMP [ numverts ] = newvert试图写一个顶点到未分配的内存。后来,你删除TMP,这已经是指向未分配的内存。后来,你删除TMP,这已经是指向未分配的内存。试图删除未分配的内存会使程序崩溃。
基本上你有正确的想法,你想,到另一个分配一个指针将复制的元素,它会的。这只会使它们指向同一件事情。
你添加的功能应该是这样的:
|
1
2
3
4
|
int
nSize = 12;int
*pnArray = new
int[nSize];
//
note: nSize does not need to be constant!pnArray[4]
= 7;delete[]
pnArray; |
372

被折叠的 条评论
为什么被折叠?



