我没有得到任何错误或类似的东西,但问题是,无论我做什么,我都无法摆脱那些内存泄漏。我发现的唯一解决方案是帮助我在每种方法之后添加delete[] vector1
,但我不允许修改代码的这一部分。 在代码中,您可以看到评论和我可以添加新说明的区域。有没有解决我的问题?在管理内存泄漏问题C++
这是代码:
#include<iostream>
using namespace std;
/*YOU CAN'T ADD NEW METHODS*/
/*YOU CAN ONLY MODIFY THE BODY OF THE METHODS*/
//read array from the console - number of elements and the elements
int * readVectorVersion1(int * noElements) {
int *vector1;
vector1 = new int[*noElements + 1];
for (int i = 0; i < *noElements; i++)
{
cout << endl << "Vector1[" << i + 1 << "]=";
cin >> vector1[i];
}
return vector1;
}
//read array from the console - number of elements and the elements
void readVectorVersion2(int ** vector, int* noElements) {
*vector = new int[*noElements + 1];
for (int i = 0; i < *noElements; i++)
{
cout << endl << "Vector1[" << i + 1 << "]=";
cin >> (*vector)[i];
}
}
//read array from the console - number of elements and the elements
void readVectorVersion3(int *& vector, int& noElements) {
vector = new int[noElements + 1];
for (int i = 0; i < noElements; i++)
{
cout << endl << "Vector1[" << i + 1 << "]=";
cin >> vector[i];
}
}
//read array from the console - number of elements and the elements
int * readVectorVersion4(int& noElements) {
int *vector1;
vector1 = new int[noElements + 1];
for (int i = 0; i < noElements; i++)
{
cout << endl << "Vector1[" << i + 1 << "]=";
cin >> vector1[i];
}
return vector1;
}
//read static array from the console - number of elements and the elements
void readStaticVector(int vector[], int * noElements) {
for (int i = 0; i < *noElements; i++)
{
cout << endl << "Vector1[" << i + 1 << "]=";
cin >> vector[i];
}
}
//print the elements of the array
void afisareVector(int* vector, int noElements) {
cout << endl << "Vector:" << endl;
for (int i = 0; i < noElements; i++)
cout << vector[i] << " ";
}
//read a name from the console
char* citesteNume() {
char temp[200];
char * nume;
cout << endl << "Your name:";
cin >> temp;
nume = new char[strlen(temp) + 1];
strcpy(nume, temp);
return nume;
}
//read a name from the console
void citesteNume(char* nume) {
cout << endl << "Your name:";
cin >> nume;
}
//METHODS THAT ADDS AN ELEMENT (THAT IS GIVEN) TO AN EXISTING ARRAY
//FIRST
void adaugaElementNou(int** vector, int* noElemente, int elementNou) {
(*vector) = new int[*noElemente + 2];
for (int i = 0; i < *noElemente; i++)
(*vector)[i] = i;
(*vector)[*noElemente] = elementNou;
}
//SECOND
int * adaugaElementNou(int& noElemente, int elementNou) {
int *vector;
vector = new int[noElemente + 2];
for (int i = 0; i < noElemente; i++)
vector[i] = i;
vector[noElemente] = elementNou;
return vector;
}
//THIRD
int * adaugaElementNou(int* noElemente, int elementNou) {
int *vector;
vector = new int[(*noElemente) + 2];
for (int i = 0; i < *noElemente; i++)
vector[i] = i;
vector[*noElemente] = elementNou;
return vector;
}
//THE PROGRAM MUST RUN AND NOT GENERATE ANY ERRORS OR MEMORY-LEAKS
void main() {
//YOU CAN'T ADD NEW VARIABLES
int * vector1;
int vector2[50];
int nrElementeVector1=3;
int nrElementeVector2=3;
//YOU CAN ADD NEW INSTRUCTIONS
// ...
vector1 = new int[nrElementeVector1 + 1];
for (int i = 0; i < nrElementeVector1; i++)
vector1[i] = i;
for (int i = 0; i < nrElementeVector2; i++)
vector2[i] = i;
//YOU CAN'T MODIFY THE FOLLOWING CODE
afisareVector(vector1, nrElementeVector1);
afisareVector(vector2, nrElementeVector2);
//delete[]vector1; /*This instruction is added by me but i`m not allowed to modify this area of the code*/
vector1 = readVectorVersion1(&nrElementeVector1);
afisareVector(vector1, nrElementeVector1);
//delete[]vector1;
readVectorVersion2(&vector1, &nrElementeVector1);
afisareVector(vector1, nrElementeVector1);
//delete[]vector1;
readVectorVersion3(vector1, nrElementeVector1);
afisareVector(vector1, nrElementeVector1);
//delete[]vector1;
vector1 = readVectorVersion4(nrElementeVector1);
afisareVector(vector1, nrElementeVector1);
//delete[]vector1;
readStaticVector(vector2, &nrElementeVector2);
afisareVector(vector2, nrElementeVector2);
char* string1;
char string2[50];
string1 = citesteNume();
cout << endl << "Hello " << string1;
//delete[]string1; /*THIS IS NOT ALLOWED HERE*/
citesteNume(string2);
cout << endl << "Hello " << string2;
vector1 = adaugaElementNou(nrElementeVector1, 99);
afisareVector(vector1, nrElementeVector1+1);
//delete[]vector1;
adaugaElementNou(&vector1, &nrElementeVector1, 55);
afisareVector(vector1, nrElementeVector1+1);
//delete[]vector1;
vector1 = adaugaElementNou(&nrElementeVector1, 77);
afisareVector(vector1, nrElementeVector1+1);
//delete[]vector1;
//YOU CAN ADD NEW INSTRUCTIONS HERE
// ...
delete[] vector1; //I`ve tried to use delete here because I didn`t knew what else i should do, but I know that it makes no sense(and it`s not working);
delete[] string1;
//THE FOLLOWING CODE CHECKS IF THERE ARE ANY MEMORYLEAKS
_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
_CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT);
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
_CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDOUT);
_CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE);
_CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDOUT);
_CrtDumpMemoryLeaks();
//YOU CAN'T MODIFY THE FOLLOWING CODE
vector1 = NULL;
string1 = NULL;
cout << endl << "In this moment there are no memory-leaks!";
}
此任务是否允许修改程序的行为(预期输出)以摆脱内存泄漏? –
这个家庭作业显然是由大约20年前学过C++的人创建的,他从来没有打算更新他的知识。 –
我想我知道该怎么做'delete [] vector1'。我会尝试和我的黑客告诉你,如果我成功了。 –