动态内存分配和堆积损坏
Dynamic Memory Allocation and Heap Corruption
对于学校的作业,我需要创建一个程序,将一个数组插入一个数组,将第一个数组的第一个x值分配到新数组中,然后将所有内容分配给全部第二,然后是其余的第一个。还需要通过动态分配的数组来完成这一点。我不明白为什么,但是由于某种原因,堆正在腐败,我不知道为什么。我刚刚学习指针,所以我发现的解决方案对我来说没有太多意义。
如果有人可以确切地指出我在做错什么,并向我解释一下,以便我可以从错误中学习,我会非常感谢。谢谢!
#include <stdlib.h>
#include <iostream>
#include <time.h>
int* createArray(int);
int* splice(int[], int[], int, int, int);
void arrayPrint(int []);
using namespace std;
int main(void)
{
int firstLength, secondLength, copyLength;
cout << "Enter the length of the first array: ";
cin >> firstLength;
cout << "Enter the length of the second array: ";
cin >> secondLength;
cout << "Enter the length of the first array to be copied: ";
cin >> copyLength;
int* firstArray;
int* secondArray;
int* thirdArray;
srand(100);
firstArray = createArray(firstLength);
secondArray = createArray(secondLength);
firstArray = new int[firstLength];
for (int i = 0; i < firstLength; i++)
firstArray[i] = rand() % 100;
secondArray = new int[secondLength];
for (int i = 0; i < secondLength; i++)
secondArray[i] = rand() % 100;
thirdArray = splice(firstArray, secondArray, firstLength, secondLength, copyLength);
cout << "First Array: " << endl;
for (int i = 0; i < firstLength; i++)
{
cout << firstArray[i] << ", ";
}
arrayPrint(firstArray);
cout << endl << "Second Array: " << endl;
for (int i = 0; i < secondLength; i++)
{
cout << secondArray[i] << ", ";
}
arrayPrint(secondArray);
cout << endl << "Spliced Array: " << endl;
arrayPrint(thirdArray);
delete firstArray;
delete secondArray;
delete thirdArray;
system("pause");
return 0;
}
int* createArray(int arrayLength)
{
int* createdArray;
createdArray = new int[arrayLength];
for (int i = 0; i < arrayLength; i++)
createdArray[i] = rand();
return createdArray;
}
int* splice(int firstArray[], int secondArray[], int firstLength, int secondLength, int copyLength)
{
int* splicedArray;
splicedArray = new int[copyLength];
for (int i = 0; i < copyLength; i++)
{
splicedArray[i] = firstArray[i];
}
for (int j = 0; j < secondLength; j++)
{
splicedArray[j + copyLength] = secondArray[j];
}
for (int k = 0; k < firstLength - copyLength; k++)
{
splicedArray[k + copyLength + secondLength] = firstArray[k + copyLength];
}
return splicedArray;
}
void arrayPrint(int toPrint[])
{
for (int i = 0; i < sizeof(toPrint) / sizeof(*toPrint); i++)
{
if ((i % 10) == 9)
cout << toPrint[i] << endl;
else
cout << toPrint[i] << ", ";
}
}
结合C_RAJ的答案,Vinodsaluja和Wander3r的评论:
您两次分配第一和第二阵列,一旦就足够了,实际上更多是内存泄漏(Vinodsaluja(。从逻辑上讲,由于第三阵列是第一和第二阵列的组合,因此其长度应为两个数组长度的总和,该长度是第一长 第二个长度,而不是胶杆基。这是发生堆腐败的地方(Vinodsaluja(。最后,应用delete [](Wander3r(对Ararys进行处理。
c_raj的代码是结果,所以我不复制它。
相关文章:
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 正在调试 malloc():新内存损坏
- 仅特定内核计数上的 MPI 内存损坏
- C++程序错误:malloc():内存损坏
- 内存地址是否由于未对齐的内存地址而损坏?
- 调用std::函数成员时内存损坏
- 通过分配大量内存来跟踪堆损坏
- C++ 内存损坏检测
- 由于标头中的 #define 不匹配而导致内存损坏
- C STD ::线程中的种族状况或内存损坏
- malloc()内存损坏仅通过为特定数量编写int数组
- 字符串标记化期间的内存损坏
- 从检测到 glibc 正常退出 - malloc():内存损坏
- 放置在外部 DLL 中的类中的字符串数据的内存损坏
- std :: string ::擦除会导致内存损坏
- 编译器如何检测内存损坏
- 获得MAC地址的代码似乎会损坏内存,但仅在发布构建中而不是调试构建
- Visual Studio在使用sockaddr_storage时会损坏内存
- 构造函数中的字段初始化会损坏内存
- 字符串结束字符会损坏内存吗?缓冲区[大小]='\0';