2015-03-20 2 views
-1

У меня есть следующий код для сортировки числа, которое я прочитал из текстового файла. Мои элементы текстового файла должны быть такие:ошибка распределения в C++

3 6 
6 
5 
1 

Первое число (3) в первом столбце представляет собой число элементов, которые я должен сортировать, первое число во второй колонке представляет максимальное число, которое я должен отправьте через массив, который здесь 6.

И номер должен быть отсортирован 6 5 1.

Так что это мой код, но есть ошибка, указывающая «недопустимый размер размещения» и способ отправки max через массив.

Мне нужна помощь, пожалуйста.

Вот мой код:

// Read and Sort.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 
#include<iostream> 
#include<fstream> 
using namespace std ; 
#include<time.h> 
#include <string> 


int Max ; 
int number_of_items; 
const int s= 22; 
int arr[s]; 
int n=sizeof(arr)/sizeof(*arr); 



class sort{ 

public: 


    int read_file() 
    { 
    int num = 0; 
    int x ; 
    char filename[50]; 
    ifstream numbersfile ; 
    cout<<"Please enter the file name below"<<endl<<"_______________________________________________"<<endl; 

    cin.getline(filename,50); 

    cout<<"_______________________________________________"<<endl; 
    numbersfile.open(filename); 

    if(numbersfile.is_open()) 
    { 



    for(int i =0;i<n;i++){ 
     numbersfile>>arr[i]; 
     Max=arr[0]; 
     number_of_items=arr[1]; 
    } 

    } 
    else{ 
     cout<<"Failed To load requierd file"<<endl; 
    } 

    int arr2[s]; 
    cout<<"The elements supposed to be sorted are:"<<endl<<endl; 
    for(int i =2;i<n;i++){ 
     numbersfile>>arr[i]; 
     cout<<arr[i]<<" "<<endl; 

    } 

     counting_sort(arr2,n); 

    return 0 ;} 


    int counting_sort(int arr[],int size) 
     { 

    int n=size; 
    int max=arr[0]; 
    for (int i=1;i<n;i++) { 
     if (arr[i]>max) { 
      max=arr[i]; 
     } 
    } 

    int *output_array=new int[n]; 
    for (int i=0;i<n;i++) { 
     output_array[i]=0; 
    } 
    int *count=new int[max+1]; 
    for (int i=0;i<=max+1;i++) { 
     count[i]=0; 

    } 

    for (int i=0;i<n;i++){ 
     count[arr[i]]=count[arr[i]]+1; 
    } 
    for (int i=1;i<max+1;i++) { 
     count[i]=count[i]+count[i-1]; 
    } 
    for (int i=n-1;i>=1;i--) { 
     output_array[count[arr[i]]-1]=arr[i]; 
     count[arr[i]]=count[arr[i]]-1; 
    } 

    cout<<"The sorted elements are:"<<endl<<endl; 
    for (int i=0;i<n;i++) { 
     cout<<output_array[i]<<" "; 
    } 
    cout<<"\n-----------------------------------------------"<<endl; 
    return 0; 
} 




}; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    clock_t t1,t2; 
    t1=clock(); 
    sort s1; 
    s1.read_file(); 

    t2 = clock(); 
    float diff = ((float)t2 - (float)t1)/1000 ; 
    cout <<"The time taken to execute this process is:\n"<< diff<<" Milliseconds." << endl; 

    return 0; 
} 
+0

Используйте [вектор] (http://www.cplusplus.com/reference/vector/vector/) вместо массивов – NathanOliver

+0

@NathanOliver я все еще учащийся, и я не использую векторы –

+0

Что такое линия ошибки? – moffeltje

ответ

1
int *count=new int[max+1]; 
for (int i = 0; i <= max+1;i++) { 
    count[i]=0; 

} 

Обратите внимания, что здесь вы выходите из диапазона, потому что вы пытаетесь получить доступ к последнему элементу в count[max+1], потому что <= в условном тесте, и это положение не выделяется. Это должно быть так:

int *count=new int[max+1]; 
for (int i = 0; i < max+1;i++) { 
    count[i]=0; 

} 

Я предлагаю вам тщательно проверить каждый для, глядя, если вы не доступ к некоторой позиции не ограниченную/выделенную. Используйте printf или cout для отладки, это действительно полезно.

+0

спасибо за помощь, но это не сработало –

Смежные вопросы