Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Warning: address of local variable returned

Ostatnio zmodyfikowano 2013-02-24 13:00
Autor Wiadomość
domin568
Temat założony przez niniejszego użytkownika
[C++] Warning: address of local variable returned
» 2013-02-19 21:04:52
Witajcie , mam problem z moim programem , napisałem coś takiego :
C/C++
#include <iostream>
#include <stdlib.h>
#include <time.h>
int wartosc = 0;
int wartoscWygranej;
using namespace std;
int * losuj( int kosci, int wszystkie_kosci )
{
    int rzucone[ 5 ];
    for( int i = 0; i < kosci; i++ )
    {
        rzucone[ i ] = rand() %( wszystkie_kosci ) + 1;
       
        cout << "Twoje kosci to: " << rzucone[ i ] << endl;
    }
    return rzucone;
}
void rzucKosci( int kosci, int wszystkie_kosci )

{
    char znak = 'T';
    srand( time( NULL ) );
   
    int rozmiar = wszystkie_kosci + 1;
    int rzucone[ kosci ];
    int tablica[ rozmiar ];
   
    for( int i = 0; i < rozmiar; i++ )
    {
        tablica[ i ] = 0;
    }
   
    int * kosci_przeciwnika = losuj( kosci, wszystkie_kosci );
   
    for( int i = 0; i < rozmiar; i++ )
    {
       
        tablica[ rzucone[ i ] ] ++;
        cout << tablica[ i ];
    }
    int wartosc = 0;
   
    for( int i = 0; i < rozmiar; i++ )
   
    {
        cout << tablica[ i ] << endl;
       
        if( tablica[ i ] == 5 )
        {
            rozmiar += 5;
            cout << "Piatka !!! " << endl;
            wartoscWygranej = 5;
            break;
           
        }
        else if( tablica[ i ] == 4 )
        {
            rozmiar += 4;
            cout << "Kareta !!! " << endl;
            wartoscWygranej = 4;
            break;
        }
       
       
        else if( tablica[ i ] == 2 )
        {
            wartosc += 2;
           
        }
       
        else if( tablica[ i ] == 3 )
        {
            wartosc += 3;
           
        }
        else if( tablica[ i ] == 1 )
        {
            wartosc += 0;
           
        }
       
       
    }
   
    if( wartosc == 4 )
    {
       
        cout << " Para !!! " << endl;
        wartoscWygranej = 2;
    }
    else if( wartosc == 5 )
    {
        cout << " FULL !!! " << endl;
        wartoscWygranej = 6;
    }
    else if( wartosc == 2 )
    {
        cout << " Dwojka !!! " << endl;
        wartoscWygranej = 1;
    }
    else if( wartosc == 3 )
    {
        cout << " Trojka !!! " << endl;
        wartoscWygranej = 3;
    }
    else if( wartosc == 0 )
    {
        cout << "Nic" << endl;
        wartoscWygranej = 0;
    }
   
   
    int strit;
    int maly_strit = 1;
    int duzy_strit = 0;
   
    if( tablica[ 0 ] == 0 )
    {
        maly_strit = 0;
        duzy_strit = 1;
    }
   
    for( int i = 0; i < rozmiar; i++ )
    {
        if( tablica[ i ] == 1 && strit < 5 ) strit++;
       
        if( i > 0 && tablica[ i ] != 1 ) duzy_strit = 0;
       
    }
   
    if( maly_strit ) std::cout << "mały strit" << std::endl;
   
    if( duzy_strit ) std::cout << "duży strit" << std::endl;
   
    //cout << " Czy przeciwnik juz moze rzucac ??? " << endl ;
    // cin >> znak ;
    if( znak == 'T' || znak == 't' );
   
    {
       
    }
    if( znak != 'T' || znak != 't' );
   
}



int main()
{
    string START;
   
    cout << "**************************" << endl;
    cout << "|      GRA W KOSCI       |" << endl;
    cout << "|    DOMINIK TAMIOLLO    |" << endl;
    cout << "**************************" << endl;
   
   
    rzucKosci( 5, 6 );
   
    return 0;
}

Tysięczny temat !!!! :P

Jednak gdy kompiluje i uruchamiam to zawiesza mi się konsola jest jednak w logu taki komunikat:
[Warning] address of local variable 'rzucone' returned [enabled by default]
.
P-76557
wojt91
» 2013-02-19 21:34:39
rzucone = rand () % (wszystkie_kosci) + 1;

w tej linijce "rzucone" traktujesz jak zmienną a dwie linijki wyżej deklarujesz jako tablice.
P-76561
domin568
Temat założony przez niniejszego użytkownika
Odpowiedz
» 2013-02-19 21:41:37
C/C++
int * losuj( int kosci, int wszystkie_kosci )
{
    int rzucone[ wszystkie_kosci + 1 ];
    for( int i = 0; i < kosci; i++ )
    {
        rzucone[ i ] = rand() %( wszystkie_kosci ) + 1;
       
        cout << "Twoje kosci to: " << rzucone[ i ] << endl;
    }
    return rzucone;
}

Zmieniłem na to : i nadal jest błąd :) , więc to nie o to chodzi.
P-76562
wojt91
» 2013-02-19 21:46:17
nie zrozumieliśmy się
rzucone = rand() %( wszystkie_kosci ) + 1;
zamień na
rzucone[ i ] = rand() %( wszystkie_kosci ) + 1;
rzucone jest nazwą tablicy (lub jak kto woli wskaźnikiem na tablicę)
i widzę że prawie wszędzie masz ten sam problem
P-76563
wojt91
» 2013-02-19 22:05:46
wrzuć swój kod w znaczniki cpp
P-76564
unimator
» 2013-02-19 22:59:47
Błąd mówi sam za siebie. Return zwraca zawsze wartość jakiejś zmiennej lub referencję do zmiennej. Ty próbujesz zwrócić tablicę statyczną. I tu rodzą się 2 problemy:
1. Zmienne lokalne mają zasięg ograniczony do funkcji, w której zostały zadeklarowane (lub bloku kodu, zależnie jak to zinterpretujemy). Jakiekolwiek odwołanie się do zmiennej lokalnej spoza funkcji jest niemożliwe.
2. Zmienne lokalne są tworzone na stosie. Oznacza to tyle, że istnieją one w pamięci tylko wtedy, gdy wywoływana jest dana funkcja. Gdy skończy ona swoje działanie zmienne te są tracone (praktycznie pozostają na stosie śmieci ale to nas nie interesuje).

Rozwiązania Twojego problemu są przynajmniej dwa. Po pierwsze możesz stworzyć tablicę globalną. Po drugie - stworzyć tablicę dynamicznie wewnątrz funkcji i zwrócić wskaźnik do niej (mniej więcej tak jak teraz). Dynamiczne obiekty różnią się tym, że nie są tworzone na stosie a na stercie. Tym samym nie dotyczy ich pojęcie zasięgu.
P-76566
domin568
Temat założony przez niniejszego użytkownika
» 2013-02-20 17:07:55
No tak moge stworzyć tablice globalną , no ale ile ona ma mieć elementów ? Do czego ją podpiąć jak jest na samej górze i nie ma się do czego odwołać , a jak tablice dynamiczną zrobić??
P-76576
domin568
Temat założony przez niniejszego użytkownika
» 2013-02-20 18:36:52
Nikt nie pomoże :))) ???
P-76584
« 1 » 2 3
  Strona 1 z 3 Następna strona