对于我的作业,它被赋予一维数组,我必须将其转换为二维数组。二维数组的列数为2,因为我必须将一维数组表示为对(数字的值,数组中的出现次数)。 这是尝试过的。错误出现在最后两行代码中:访问冲突写入位置0xfdfdfdfd。
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
const int NR=17;
int arr[NR]={6,7,3,1,3,2,4,4,7,5,1,1,5,6,6,4,5};
int **newArr;
int count=0;
int countLines=0;
int searched;
for(int i=0;i<NR;i++)
{
newArr=new int*[countLines];
for(int i=0;i<countLines;i++)
{
newArr[i]=new int[2];
}
searched=arr[i];
if(i>0)
{
for(int k=0;k<countLines;k++)
{
if(newArr[countLines][0] == searched)
{
searched=arr[i]++;
}
for(int j=0;j<NR;j++)
{
if(searched==arr[j])
{
count++;
}
}
countLines++;
}
}
else
{
for(int j=0;j<NR;j++)
{
if(searched==arr[j])
{
count++;
}
}
countLines++;
}
newArr[countLines][0]=searched;
newArr[countLines][1]=count;
}
}
答案 0 :(得分:3)
首先在第一个循环中使用newArr
,然后再分配任何内存。您不能取消引用不具有合法内存的指针。它会导致不确定的行为。
其次在最后一部分中,您将newArr
分配一个等于countLines
的内存。
newArr = new int*[countLines] ;
这意味着newArr
的第一维中的索引是0------>countLines-1
。再次未定义newArr[countLines][0] = searched ;
。设为newArr[countLines - 1]
。
答案 1 :(得分:1)
我不会打扰逐行代码分析,因为(a)当人们回答你的问题时你正在改变它;(b)它会花费太长时间。但这里是一个关于旧车的总结(非详尽无遗):
您可以解决此问题的一种方法(无数种方式)如下所示:
#include <iostream>
#include <algorithm>
int main()
{
// 0. Declare array and length
int arr[]={6,7,3,1,3,2,4,4,7,5,1,1,5,6,6,4,5};
const size_t NR = sizeof(arr)/sizeof(arr[0]);
// 1. sort the input array
std::sort(arr, arr+NR);
/* alternaive sort. for this input size bubble-sort is
more than adequate, in case your limited to not being
allowed to use the standard library sort */
/*
for (size_t i=0;i<NR;++i)
for (size_t j=i+1;j<NR;++j)
if (arr[i] > arr[j])
{
arr[i] ^= arr[j];
arr[j] ^= arr[i];
arr[i] ^= arr[j];
}
*/
// 2. single scan to determine distinct values
size_t unique = 1;
for (size_t i=1;i<NR;++i)
if (arr[i] != arr[i-1])
unique++;
// 3. Allocate a [unique][2] array
int (*newArr)[2] = new int[unique][2];
// 4. Walk array once more, accumulating counts
size_t j=0;
newArr[j][0] = arr[0];
newArr[j][1] = 1;
for (size_t i=1;i<NR;++i)
{
if (arr[i] != arr[i-1])
{
newArr[++j][0] = arr[i];
newArr[j][1] = 0;
}
++newArr[j][1];
}
// 5. Dump output
for (size_t i=0;i<unique;++i)
cout << newArr[i][0] << " : " << newArr[i][1] << endl;
delete [] newArr;
return EXIT_SUCCESS;
}
<强>输出强>
1 : 3
2 : 1
3 : 2
4 : 3
5 : 3
6 : 3
7 : 2