J
jimspace
Can someone look at each of the classes below and tell me where the
subtle bugs are? Thanks.
Handle/Body idiom
class A {
private:
int i;
public:
void fct() const;
}
// --------------------------------------------------
class A {
public:
A() { };
~A() { };
virtual void fct() { };
};
// --------------------------------------------------
class A {
// ...
};
class B : public A {
// ...
};
void fct( A a ) { /* ... */ };
int main() {
B b;
fct( b );
};
// --------------------------------------------------
#include <math.h>
#include <stdio.h>
int main() {
for( int i=0; i<10; i++ ){
printf( "%i %f \n", i, sin( ((double)i)*M_PI ) );
}
return 0;
}
// --------------------------------------------------
class A {
public:
void fct() { /* ... */ };
};
int main() {
A *a = new A();
a->fct();
delete a;
}
// --------------------------------------------------
class A {
// ...
};
A& fct() {
A a;
// ...
return a;
}
// --------------------------------------------------
#include <stdio.h>
int main() {
char c;
while( (c=getchar()) != EOF ){
putchar( c );
}
}
// --------------------------------------------------
class A {
private:
int upper;
int lower;
public:
A( int i ) : lower( i ), upper( lower+1 ) { };
};
// --------------------------------------------------
int a[10000];
void f() {
int i;
for( i=0; i<10000; i++ );
a = i;
}
// --------------------------------------------------
#include <stdlib.h>
void extend( char *p ) {
char *tmp = (char *)malloc( 20*sizeof(char) );
if( tmp ){
free(p);
p = tmp;
}
}
int main() {
int i;
char *p = (char *)malloc( 10*sizeof(char) );
if( p ){
extend( p );
}
for( i=0; i<20; i++ ){
p = 'q';
}
return 0;
}
// --------------------------------------------------
subtle bugs are? Thanks.
Handle/Body idiom
class A {
private:
int i;
public:
void fct() const;
}
// --------------------------------------------------
class A {
public:
A() { };
~A() { };
virtual void fct() { };
};
// --------------------------------------------------
class A {
// ...
};
class B : public A {
// ...
};
void fct( A a ) { /* ... */ };
int main() {
B b;
fct( b );
};
// --------------------------------------------------
#include <math.h>
#include <stdio.h>
int main() {
for( int i=0; i<10; i++ ){
printf( "%i %f \n", i, sin( ((double)i)*M_PI ) );
}
return 0;
}
// --------------------------------------------------
class A {
public:
void fct() { /* ... */ };
};
int main() {
A *a = new A();
a->fct();
delete a;
}
// --------------------------------------------------
class A {
// ...
};
A& fct() {
A a;
// ...
return a;
}
// --------------------------------------------------
#include <stdio.h>
int main() {
char c;
while( (c=getchar()) != EOF ){
putchar( c );
}
}
// --------------------------------------------------
class A {
private:
int upper;
int lower;
public:
A( int i ) : lower( i ), upper( lower+1 ) { };
};
// --------------------------------------------------
int a[10000];
void f() {
int i;
for( i=0; i<10000; i++ );
a = i;
}
// --------------------------------------------------
#include <stdlib.h>
void extend( char *p ) {
char *tmp = (char *)malloc( 20*sizeof(char) );
if( tmp ){
free(p);
p = tmp;
}
}
int main() {
int i;
char *p = (char *)malloc( 10*sizeof(char) );
if( p ){
extend( p );
}
for( i=0; i<20; i++ ){
p = 'q';
}
return 0;
}
// --------------------------------------------------