Mam za zadanie używając Valgrind'a znaleźć i poprawić błędy w dwóch krótkich kodach, lecz nie mam pojęcia nawet bez używania Valgrind'a co tutaj nie trybi i nie do końca rozumiem te kody, ktoś podpowie / naprowadzi?
PS: Z tego co poczytałem to Valgrind jest tylko na Linux, a nie chce bawić się w virtual box itp. bo czas mi na to nie pozwala.
Kody:
Kod nr 1:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char *upper;
char *to_upper(const char *str)
{
char *l = strdup(str);
char *c;
for (c = l; *c; c++) {
if (islower(*c))
*c = toupper(*c);
}
return l;
}
int main(int argc, char *argv[])
{
upper = to_upper(argv[1]);
while (*upper)
putchar (*(upper++));
puts ("");
return 0;
}
Kod nr 2:
#include <iostream>
#include <iomanip>
using namespace std;
const double WMIN = -1000.0;
const double WMAX = 1000.0;
struct elem
{
unsigned nastepnik;
double dane;
};
int main(int argc, char *argv[])
{
int N = atoi(argv[1]);
elem *L;
double *d,we,szkb;
int *K,ikb,ine,ip,ib,i,j;
L = new elem[N + 1];
d = new double[N];
K = new int[N - 1];
cout.precision(2); // 2 cyfry po przecinku
cout.setf(ios::fixed); // format staloprzecinkowy
// Generujemy zawartosc tablicy d[] i wyswietlamy ja
cout << "Przed sortowaniem:" << endl;
srand((unsigned)time(NULL));
for(i = 0; i < N; i++)
{
d[i] = WMIN + (double)rand() / (double)(RAND_MAX+1) * (WMAX - WMIN);
cout << d[i] << " ";
}
cout << endl;
// Zerujemy kubelki
for(i = 0; i <= N; i++)
K[i] = 0;
// Obliczamy szerokosc kubelka
szkb = (WMAX - WMIN) / N;
//ine = 1;
// Rozrzucamy poszczegolne elementy d[i] na listach K[]
for(i = 0; i < N; i++)
{
we = d[i];
ikb = (int)((we - WMIN) / szkb);
L[ine].nastepnik = 0;
L[ine].dane = we;
ip = 0; ib = K[ikb];
while((ib > 0) && (L[ib].dane < we))
{
ip = ib;
ib = L[ib].nastepnik;
}
if(!ip)
{
L[ine].nastepnik = ib;
K[ikb] = ine;
}
else if(!ib) L[ip].nastepnik = ine;
else
{
L[ip].nastepnik = ine;
L[ine].nastepnik = ib;
}
ine++;
}
// wybieramy dane z kubelkow i umieszczamy je w d[]
j = 0;
for(ikb = 0; ikb <= N; ikb++)
{
i = K[ikb];
while(i)
{
d[j++] = L[i].dane;
i = L[i].nastepnik;
}
}
// Koniec. Wyswietlamy wyniki
cout << endl << "Po sortowaniu:" << endl;
for(i = 0; i < N; i++)
cout << d[i] << " ";
cout << endl;
free(L);
return 0;
}
grzesiek51114