PLease help me.Wots the problem with following code....?

Discussion in 'C Programming' started by alankrit, May 29, 2006.

  1. alankrit

    alankrit Guest

    Helo
    This is a code for Radix sort. n it is giving a run-time Error :
    "Run-Time Check Failure #2 - Stack around the variable 'count' was
    corrupted."

    I have cross checked this code a millions of times.
    what is the problem here..??????????????????

    #include "stdafx.h"
    #include<iostream>
    #include<stdlib.h>

    using namespace std;

    #define CHAR_BIT 8
    #define UCHAR_MAX 0xff
    #define RANGE ((1U << CHAR_BIT)+1)
    #define digit(x,i) ( (x) >> ( (i) * CHAR_BIT) ) & UCHAR_MAX
    #define SIZE 100

    void radixsort(long *a, long );
    void radixpass(long *a, long *aux, long , int radix);
    void makerandom(long *a, long );


    int _tmain(int argc, _TCHAR* argv[])
    {
    long data[SIZE];
    makerandom(data,SIZE);

    radixsort(data,SIZE);

    for(int i=0;i<SIZE;i++)
    cout<<data<<"\n";

    return 0;
    }

    void makerandom(long *a,long N)
    {
    for(int i=0;i<N;i++)
    a=rand();
    }

    void radixsort(long *a,long N)
    {
    long *aux=(long *)malloc(N*sizeof(long));

    for(int radix=0;radix< sizeof(*a);radix++)
    radixpass(a,aux,SIZE,radix);

    free(aux);
    }

    void radixpass(long *a,long *aux, long N, int radix)
    {
    long count[RANGE];
    long *cp=count;

    for(int i=0;i<RANGE;i++,cp++)
    *cp=0;

    for(int i=0;i<N;i++)
    count[ digit( a, radix ) +1 ]++;

    for(int i=0;i< RANGE;i++)
    count[i+1]+=count;

    for(int i=0;i<N;i++)
    aux[ count[digit(a,radix)]++ ]=a;

    for(int i=0;i<N;i++)
    a=aux;
    }
     
    alankrit, May 29, 2006
    #1
    1. Advertisements

  2. alankrit

    santosh Guest

    .... snip ...
    This is a non-standard header. This group discusses ISO standard
    compliant C programs.
    This is a C++ header. This group is for C only. Post to comp.lang.c++.

    .... snip code ...
     
    santosh, May 29, 2006
    #2
    1. Advertisements

  3. said:
    Non-standard header.
    Non-standard header.
    Syntax error.
    You do realise that + has a higher precedence than &, don't you? Use more
    parentheses.
    There seems little point in continuing this analysis, since you don't appear
    to have done the minimal research necessary to learn how C defines the
    entry point to a program.
     
    Richard Heathfield, May 29, 2006
    #3
  4. alankrit

    alankrit Guest

    Well i have made the following changes.But still its not working,
    giving the same run-time error.

    and header files are all correct.

    // Radix_Sort_1.cpp : Defines the entry point for the console
    application.
    //

    #include "stdafx.h"
    #include<iostream>
    #include<stdlib.h>

    using namespace std;


    #define digit(x,i) (( (x) >> ( (i) * 8 ) ) & 0xff )
    #define SIZE 100

    void radixsort(long *a, long );
    void radixpass(long *a, long *aux, long , int radix);
    void makerandom(long *a, long );


    int _tmain(int argc, _TCHAR* argv[])
    {
    long data[SIZE];
    makerandom(data,SIZE);

    radixsort(data,SIZE);

    for(int i=0;i<SIZE;i++)
    cout<<data<<"\n";

    return 0;
    }

    void makerandom(long *a,long N)
    {
    for(int i=0;i<N;i++)
    a=rand();
    }

    void radixsort(long *a,long N)
    {
    long *aux=(long *)malloc(N*sizeof(long));

    for(int radix=0;radix< sizeof(*a);radix++)
    radixpass(a,aux,N,radix);

    free(aux);
    }

    void radixpass(long *a,long *aux, long N, int radix)
    {
    long count[257];
    long *cp=count;

    for(int i=0;i<257;i++,cp++)
    *cp=0;

    for(int i=0;i<N;i++)
    count[ digit( a, radix ) +1 ]++;

    for(int i=0;i< 257;i++)
    count[i+1]+=count;

    for(int i=0;i<N;i++)
    aux[ count[digit(a,radix)]++ ]=a;

    for(int i=0;i<N;i++)
    a=aux;
    }


    Syntax error.
    Hey BTW i dont how to use these constants.Cud u plz temme how to use
    it?
    thanks.
     
    alankrit, May 29, 2006
    #4
  5. alankrit

    santosh Guest

    You're repeatedly posting non-C code. This group only discusses
    standard C. I suggest that you post to a C++ group like comp.lang.c++
    or better yet, a group devoted for your particular platform. If I'm
    right, this is a Windows program. Post to a group in the
    comp.os.ms-windows.* hierarchy.
    .... snip code ...
    If you need to learn the rudimentary usage of variables and constants a
    good text on ISO C or C++ programming will be more suitable than asking
    questions here and waiting for a response.

    Study and work through a book like "The C Programming Langauge 2 Ed.",
    and if you encounter problems within specific areas, you can post here.
     
    santosh, May 29, 2006
    #5
  6. .... a C program

    Try a C++ newsgroup.

    -- Richard
     
    Richard Tobin, May 29, 2006
    #6
  7. Please post C++ questions to a C++ group. This group deals only with
    C.


    Remove del for email
     
    Barry Schwarz, May 29, 2006
    #7
  8. alankrit

    codergem Guest

    Thanks friends.
    finally i got my answer. :)
     
    codergem, May 29, 2006
    #8
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.