堆损坏和程序崩溃
getting heap corruption and program crashing
我写了以下内容来解决以下问题"给定一个未排序的数字列表,你能找到它们之间绝对差异最小的数字吗?如果有多个对,请全部找到它们。
这是代码
#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <cstdio>
#include <limits>
#include <vector>
#include <cstdlib>
#include <numeric>
#include <sstream>
#include <iostream>
#include <algorithm>
using namespace std;
int* smallestDiff(vector<int> a,int &noOfPairs)
{
sort(a.begin(),a.end());
int * arr = new int(a.size()* sizeof(int) *2);
bool bfoundDiff = false;
int smallestDiff =0;
int num1,num2;
for(size_t i=0;i<a.size()-1;i++)
{
num1 = a[i];
num2 = a[i+1];
int newDiff = num2-num1;
if(!bfoundDiff || newDiff < smallestDiff)
{
smallestDiff = newDiff;
arr[0] = num1;
arr[1]= num2;
noOfPairs = 1;
bfoundDiff = true;
}
}
for(size_t i=0;i<a.size()-1;i++)
{
num1 = a[i];
num2 = a[i+1];
int newDiff = num2-num1;
if(newDiff == smallestDiff && num1!=arr[0] && num2!=arr[1])
{
arr[noOfPairs*2] = num1;
arr[noOfPairs*2 + 1] = num2;
++noOfPairs;
}
}
return arr;
}
int main() {
int _a_size;
cin >> _a_size;
cin.ignore (std::numeric_limits<std::streamsize>::max(), 'n');
vector<int> _a;
int _a_item;
for(int _a_i=0; _a_i<_a_size; _a_i++) {
cin >> _a_item;
_a.push_back(_a_item);
}
int noOfPairs=0;
int *result =smallestDiff(_a,noOfPairs);
int noOfelems = noOfPairs*2;
for(int i=0;i<noOfelems;++i)
{
cout<< *(result+i)<<" ";
}
return 0;
}
现在程序按照逻辑运行良好,但是当它尝试打印结果值时它会崩溃。我认为将指针作为返回类型传递没有任何问题。
你们在这里看到任何问题吗?
您在以下行中输入了拼写错误:
int * arr = new int(a.size()* sizeof(int) *2);
它应该是这样的:
int * arr = new int[a.size()* sizeof(int) *2];
不是分配数组,而是分配单个整数并使用您认为必须的大小对其进行初始化。
相关文章:
- 提升 ASIO Async_receive崩溃程序
- 类指针方法崩溃程序
- get_body来自 IHTMLDocument2 崩溃程序
- 是否有可能存在不会崩溃程序的内存问题
- 调试运行时出现奇怪的崩溃程序(Eclipse C++)
- 儿童对话框 - setWindowTexta或sendmessagea崩溃程序-MFC
- 顶点阵列GLFW崩溃C 程序
- 将值分配给Float数据类型崩溃程序
- OpenCV-将变量添加到类成员崩溃程序
- boost::interprocess::managed_shared_memory 崩溃程序
- 将枚举值分配给整数崩溃程序
- SDL 1.2 -> SDL 2.0(崩溃程序)
- 空析构函数崩溃程序:C++
- 冒泡排序崩溃程序c++
- Ofstream关闭崩溃程序
- 删除字符* 崩溃程序
- c++矢量擦除崩溃程序
- Lua_getglobal崩溃程序
- 通过Copy Constructor创建的e2打印崩溃程序
- RNG崩溃c++程序