2015-01-24 4 views
-1

Может кто-нибудь сказать мне, почему во время компиляции не было ошибки, но во время работы программы она давала ложное возвращение. Я хочу создать случайный массив long и найти max. Спасибо вам большое и извините за мой английский.Random Array of long

#include <iostream> 
#include <stdlib.h> 
#include <ctime> 
#include <conio.h> 
#include <malloc.h> 

using namespace std; 

void main() 
{ 
long max,dem; 
//srand(time(0)); 
long *A=(long *)malloc(1000000*sizeof(long)); 
srand(time(NULL)); 
for(long i=0;i<1000000;i++) 
{ 
    A[i]=rand(); 
} 
max=A[0]; 
for(long i=0;i<1000000;i++) 
{ 
    if(A[i]<max) 
      max=A[i]; 
} 
dem=0; 
for(long i=0;i<1000000;i++) 
    {if(A[i]==max) dem++;} 
cout <<"\n Gia tri lon nhat:  "<<max; 
cout <<"\n Tan so xuat hien:  "<<dem; 
getch(); 
} 
+0

Вы должны использовать new/delete в C++, а не malloc/free. Кроме того, void main не является стандартным – Borgleader

+3

Вы должны использовать векторы, а не новые/удалить в C++. –

+0

Спасибо, ребята. Я просто хочу использовать sth of C, это просьба учителя. :) –

ответ

-1

Этот

if(A[i]<max) 
     max=A[i]; 

выглядит так, как будто это должно быть

//  v-- here 
if(A[i]>max) 
     max=A[i]; 

Side Примечание: Вы не очистить память вы выделить. По крайней мере, вы должны

free(A); 

после того, как вы закончите с этим. Кроме того, не делайте этого, потому что обработка голой памяти редко бывает хорошей идеей. Вместо этого используйте std::vector:

#include <vector> 

... 

std::vector<long> A(1000000); 

вместо

long *A=(long *)malloc(1000000*sizeof(long)); 

Тогда вам не придется делать какую-либо ручную очистку, так как деструктор std::vector «s будет обрабатывать Deallocation когда A выходит из области видимости. std::vector перегружает оператор [], чтобы сделать его пригодным для использования (для многих целей), как простой массив, поэтому вам не придется менять остальную часть кода для работы.

... больше одной вещи, за исключением:

void main() 

не является стандартом C++; Из-за этого gcc и clang отказываются компилировать ваш код. Вы должны использовать

int main() 

вместо этого. Опять же, никаких дальнейших изменений не требуется; существует специальное исключение для функции main, которая возвращает 0, если значение явно не возвращено. По соглашению, 0 указывает на успешное завершение работы с окружающей оболочкой; в случае ошибки main должен вернуть ненулевое значение.

+0

спасибо за ваш ответ, это была простая ошибка, которую я не мог видеть. Но, пожалуйста, помогите мне, почему значение max не меняется, только количество максимальных изменений? –

+0

Значение 'max' меняется для меня почти каждый раз. Если вы получаете одно и то же значение «dem» несколько раз подряд, это связано с тем, что с миллионом случайных чисел в диапазоне значений 2 миллиарда вероятность того, что максимальное число появляется только один раз, довольно высока. – Wintermute

+0

Да, спасибо. Я получил его 1 секунду назад. Спасибо за ваш ответ. :) –