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

A

alankrit

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;
}
 
S

santosh

Helo
This is a code for Radix sort. n it is giving a run-time Error :
.... snip ...
#include "stdafx.h"

This is a non-standard header. This group discusses ISO standard
compliant C programs.
#include<iostream>

This is a C++ header. This group is for C only. Post to comp.lang.c++.

.... snip code ...
 
R

Richard Heathfield

(e-mail address removed) said:
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"

Non-standard header.
#include<iostream>

Non-standard header.
#include<stdlib.h>

using namespace std;

Syntax error.
#define CHAR_BIT 8
#define UCHAR_MAX 0xff

See said:
#define RANGE ((1U << CHAR_BIT)+1)
#define digit(x,i) ( (x) >> ( (i) * CHAR_BIT) ) & UCHAR_MAX

You do realise that + has a higher precedence than &, don't you? Use more
parentheses.
#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[])

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.
 
A

alankrit

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.
#define CHAR_BIT 8
#define UCHAR_MAX 0xff

Hey BTW i dont how to use these constants.Cud u plz temme how to use
it?
thanks.
 
S

santosh

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>

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 ...
Hey BTW i dont how to use these constants.Cud u plz temme how to use it?

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.
 
B

Barry Schwarz

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

Please post C++ questions to a C++ group. This group deals only with
C.


Remove del for email
 

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. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,756
Messages
2,569,535
Members
45,008
Latest member
obedient dusk

Latest Threads

Top