正在Mac上的Xcode上尝试C++-ERROR-exc_bad_access(代码=1地址=0x100500000)

Trying C++ on Xcode on Mac- ERROR-exc_bad_access (code=1 address=0x100500000)

本文关键字:代码 Mac 1地址 0x100500000 access bad Xcode 正在 C++-ERROR-exc 上的      更新时间:2023-10-16

我一直在尝试编写一个程序,在这个程序中,我必须读取一个大约有3000万个长值的二进制文件,我们必须找出我使用较少值成功完成的模式,但当我尝试使用该文件时,它总是给我错误-exc_bad_access(代码=1地址=0x100500000),我正在MAC上的Xcode中尝试,并在C++中实现。代码如下,有人能帮我吗?

#include <iostream>
#include<fstream>
#include<string>
#include<vector>
using namespace std;
void mode(long data[], long size, long &num_modes, long modeNums[], long    &maxFrequency);
int main()
{


long *data,*modeNums, size;
ifstream binaryin("TestData.bin", ios::binary);
binaryin.read(reinterpret_cast<char *>(&size), 4);

data = new(nothrow)long[size];


if(!data)
{ cout<<"Memory allocation error for data array, program will terminaten";
    system("pause");
    exit(0); }
binaryin.read(reinterpret_cast<char *>(data),size*sizeof(long));
//cout<<"SIZE "<<size<<endl;
long num_modes;long maxFrequency;
modeNums=new(nothrow)long[size];
size=3000000;
   mode(data,size,num_modes,modeNums,maxFrequency);
   /* for(int i=0;i<20;i++)
     cout<<"data[i]"<<data[i]<<endl;*/

   // cout<<"maxFrequency= "<<maxFrequency;
   // cout<<"nnum_modes= "<<num_modes<<endl;
       //  for(int i=0;i<num_modes;i++)
      //    cout<<"modeNums[]= "<<modeNums[i]<<endl;
}

void mode(long data[], long size, long &num_modes, long modeNums[], long  &maxFrequency)
{
  // size=300000;
// cout<<"SIZE "<<size<<endl;
int cnt=0,val=0;// long *arr,*arr1;
vector<long> arr;
vector<long> arr1;
//arr=new(nothrow)long[size/2];
//arr1=new(nothrow)long[size/2];
// cout<<"INSIDE THE FUNCTIONn";
//cout<<"SIZE "<<size<<endl;
long k;
//cout<<"SIZE   "<<size<<endl;
cout<<"nstarting for loopn";
for(int i=0;i<size;i++)
{   cout<<"Inside for loopn";
    cnt=0; k=(size-1);
    long num=data[i];
    int flag=0;
    int temp=val;
    while(temp!=0)
    {  cout<<"inside while loopn";
        if(arr[temp]==num)
        { flag=1;}
        temp--;
    }
    if(flag==0){
        int count=0;
        for(int j=0;j<(size/2);j++)
        {// cout<<"Inside for which is inside whilen";
            cout<<"data[j] "<<data[j]<<" "<<"data[k] "<<data[k]<<endl;
             cout<<"COUNT "<<count++<<endl;
            if(num==data[j] && num==data[k])
            { cnt+=2; }
            else if(num==data[j]||num==data[k])
            {  cnt++;   }
            k--;
        }
        arr.push_back(num);arr1.push_back(cnt);
        val++;
    }
    else
        flag=2;
}
cout<<"nend of for loopn";
// for(int i=0;i<val;i++)
//   cout<<"NUM "<<arr[val]<<"Mode "<<arr1[val]<<endl;
maxFrequency=0;
for(int i=0;i<val;i++)
{
    if(arr1[i]>maxFrequency)
        maxFrequency=arr1[i];
}
num_modes=0; int value=0;
for(int i=0;i<val;i++)
{
    if(arr1[i]==maxFrequency)
    {   num_modes++;
    modeNums[value]=arr[i];
        value++; }
}
 /*   int value=0;
for(int i=0;i<val;i++)
{
    if(maxFrequency==arr1[i])
    { modeNums[value]=arr[i];
        value++;}
} */
 //  for(int i=0;i<val;i++)
//    cout<<"Value "<<arr[i]<<"                    Mode "<<arr1[i]<<endl;
//  cout<<"maxFrequency= "<<maxFrequency<<endl;
// cout<<"nnum_modes= "<<num_modes<<endl;
cout<<"nend of functionn";
}

在此处输入图像描述

此行:

size=3000000;

意味着分配一定大小的数组(无论从文件中读取什么),然后告诉mode函数这些数组的大小实际上是3000000长。这可能会导致缓冲区溢出。

我看不出有什么理由让这条线在那里。

此外,如果使用new(nothrow),则应检查返回值。