Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf ·...
Transcript of Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf ·...
![Page 1: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/1.jpg)
Giorgio [email protected]
Common C Programming Errors
int x = 2;switch(x) {case 2: printf("Two\n");case 3: printf("Three\n");}
![Page 2: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/2.jpg)
Giorgio [email protected]
Common C Programming Errors
int x = 5;if ( x = 6 ) printf("x equals 6\n");
![Page 3: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/3.jpg)
Giorgio [email protected]
Common C Programming Errors
int x;char *st = malloc(31);double dbl;
scanf("%d", &x); scanf("%30s", &st);scanf(“%f”,&dbl);
![Page 4: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/4.jpg)
Giorgio [email protected]
Common C Programming Errors
int i=0;char a[1000];get_data(a);while (a[i++]!='\n') { do_something(); }
![Page 5: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/5.jpg)
Giorgio [email protected]
Common C Programming Errors
#include <string.h>int main(){ char *st; strcpy(st, "abc"); return 0;}
![Page 6: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/6.jpg)
Giorgio [email protected]
Common C Programming Errors
#include <string.h>char * foo(){ char st[20]; strcpy(st, "abc"); return(st);}
![Page 7: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/7.jpg)
Giorgio [email protected]
Common C Programming Errors
#include <string.h>char * foo(){ char *st=malloc(20); strcpy(st, "abc"); return(st);}
![Page 8: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/8.jpg)
Giorgio [email protected]
Common C Programming Errors
#include <string.h>char * foo(){ char *st; if (!(st=malloc(20)) return(NULL); strcpy(st, "abc"); return(st);}
![Page 9: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/9.jpg)
Giorgio [email protected]
Common C Programming Errors
char ch = 'A'; char ch = "A";
const char * st = "A"; const char * st = 'A';
![Page 10: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/10.jpg)
Giorgio [email protected]
Common C Programming Errors
char st1[] = "abc";char st2[] = "abc";if ( st1 == st2 ) printf("Yes");else printf("No");
![Page 11: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/11.jpg)
Giorgio [email protected]
Common C Programming Errors
char st1[] = "abc";char st2[] = "abc";if ( !strcmp(st1,st2 )) printf("Yes");else printf("No");
![Page 12: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/12.jpg)
Giorgio [email protected]
Common C Programming Errors
char st1[] = "abcd";char st2[10] ;strncpy(st2,st1,3);do_something(st2);
![Page 13: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/13.jpg)
Giorgio [email protected]
Common C Programming Errors
char * copy_str = malloc( strlen(orig_str));strcpy(copy_str, orig_str);
![Page 14: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/14.jpg)
Giorgio [email protected]
Common C Programming Errors
int count_line_size( FILE * fp ){ char ch; int cnt = 0; while( (ch = fgetc(fp)) != EOF && ch != '\n') cnt++; return cnt;}
![Page 15: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/15.jpg)
Giorgio [email protected]
Common C Programming Errors
int count_line_size( FILE * fp ){ char ch; int cnt = 0; while((int)(ch=(char)fgetc(fp))!=EOF&&ch!='\n') cnt++; return cnt;}
![Page 16: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/16.jpg)
Giorgio [email protected]
Common C Programming Errors
FILE * fp = fopen("test.txt", "r"); char line[100]; while( ! feof(fp) ) { fgets(line, sizeof(line), fp); fputs(line, stdout); } fclose(fp);
![Page 17: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/17.jpg)
Giorgio [email protected]
Common C Programming Errors
FILE * fp = fopen("test.txt", "r"); char line[100]; while( 1 ) { fgets(line, sizeof(line), fp); if ( feof(fp) ) break; fputs(line, stdout); } fclose(fp);
![Page 18: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/18.jpg)
Giorgio [email protected]
Common C Programming Errors
FILE * fp = fopen("test.txt", "r"); char line[100]; while( fgets(line, sizeof(line), fp) != NULL ) fputs(line, stdout); fclose(fp);
![Page 19: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/19.jpg)
Giorgio [email protected]
Common C Programming Errors
if( 0 < a < 5) c; if( a =! b) c; int foo (a) { if (a) return(1); }foo(pointer->member, pointer = &buffer[0]);
![Page 20: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/20.jpg)
Giorgio [email protected]
Robust Programming
int foo( char *c, int p1, int p2 ) { if ( c == NULL ) { printf("error null object\n"); return .. ; /* an appropriate error value */ } ... /* perform something on c */ }
![Page 21: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/21.jpg)
Giorgio [email protected]
Robust Programming
#include <assert.h>int foo(char *c, int p1, int p2 ) { assert( c != NULL );
... /* perform something on c */ }
![Page 22: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/22.jpg)
Giorgio [email protected]
Other Common Errors
● Not checking malloc() return value● Calling free() multiple times on the same pointer● Calling free() on a memory area not allocated by
malloc/calloc/realloc● Using a freed pointer● Memory Leaks
![Page 23: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/23.jpg)
Giorgio [email protected]
Hints & Tips
● Use indent● Initialize variables (!)● Always check:
– input parameters (range, NULL, etc..) – return values
● Return Sensible Values to Caller– never use void functions– a global variable / structure with error information
![Page 24: Common C Programming Errors - uniroma1.ittwiki.di.uniroma1.it/pub/Lab_so_2/MyStuff/C_Errors.pdf · Giorgio Richelli giorgio_richelli@it.ibm.com Common C Programming Errors int x =](https://reader031.fdocuments.in/reader031/viewer/2022022606/5b7e783e7f8b9a204c8db782/html5/thumbnails/24.jpg)
Giorgio [email protected]
Hints & Tips
● Use assert or similar constructs● Preprocessor & Conditional Compilation
– #if defined (DEBUG) ... #endif● Cleanup & Exit, instead of unwinding stacks
– atexit()● Exploit debugger
– cc -g ....– gdb