~MyClass() { // ERROR **********found********** delete array[i]; }
时间: 2023-09-09 10:14:22 浏览: 92
在这段代码中,错误是`delete array[i]`。应该使用`delete[] array[i]`来释放数组元素的内存,因为`array`是一个指向数组的指针。正确的写法应该是:
```cpp
~MyClass() {
for (int i = 0; i < size; i++) {
delete array[i];
}
}
```
这样才能正确释放每个数组元素的内存。
相关问题
// proj1.cpp #include <iostream> using namespace std; class MyClass { public: MyClass(int len) { array = new int[len]; arraySize = len; for(int i = 0; i < arraySize; i++) array[i] = i+1; } ~MyClass() { // ERROR **********found********** delete [] array; } void Print() const { for(int i = 0; i < arraySize; i++) // ERROR **********found********** cout << array[i] << ' '; cout << endl; } private: int *array; int arraySize; }; int main() { // ERROR **********found********** MyClass obj(10); obj.Print(); return 0; }
以下是将 C++ 代码转换为 Java 代码的示例:
```java
// proj1.java
import java.util.*;
class MyClass {
private int[] array;
private int arraySize;
public MyClass(int len) {
array = new int[len];
arraySize = len;
for (int i = 0; i < arraySize; i++) {
array[i] = i + 1;
}
}
protected void finalize() throws Throwable { // ERROR **********found**********
super.finalize();
// Free the resources
if (array != null) {
Arrays.fill(array, 0);
array = null;
}
}
public void Print() {
for (int i = 0; i < arraySize; i++) { // ERROR **********found**********
System.out.print(array[i] + " ");
}
System.out.println();
}
}
public class proj1 {
public static void main(String[] args) {
MyClass obj = new MyClass(10); // ERROR **********found**********
obj.Print();
}
}
```
请注意,Java 中没有析构函数,因此我们使用了 `finalize()` 方法来释放资源。另外,在 Java 中不需要使用 `using namespace std` 来导入命名空间。
#include <iostream> using namespace std; class MyClass { int* p; const int N; public: // ERROR **********found********** MyClass(int val) : N=1 { p = new int; *p = val; } // ERROR **********found********** ~MyClass() { delete *p; } friend void print(MyClass& obj); }; // ERROR **********found********** void MyClass::print(MyClass& obj) { cout << "value = " << *(obj.p) << endl; cout << "number = " << obj.N << endl; } int main() { MyClass obj(63); print(obj); return 0; }
在这段代码中,有三个错误:
1. 在 MyClass 类的构造函数中,使用了 const 成员初始化列表,但是 N 是一个非静态成员变量,不能在初始化列表中初始化。正确的做法是在构造函数的函数体中给 N 赋值。
2. 在 MyClass 类的析构函数中,使用了 delete *p,但是 p 是一个指向 int 的指针,应该使用 delete p。
3. 在 MyClass 类的友元函数 print() 中,应该将其定义为 MyClass 类的成员函数,而不是独立的函数。
下面是修改后的代码:
```cpp
#include <iostream>
using namespace std;
class MyClass {
int* p;
const int N;
public:
MyClass(int val) : N(1) {
p = new int;
*p = val;
}
~MyClass() { delete p; }
void print() {
cout << "value = " << *p << endl;
cout << "number = " << N << endl;
}
};
int main() {
MyClass obj(63);
obj.print();
return 0;
}
```
阅读全文