Beispiel #1
0
int main()
{
	char* developer = (char*) malloc(sizeof(char)*50);

	// identify com parametros ok
	if(identify2(developer, 50) == 0) printf("a) developer: %s \n", developer);

	// identify com size menor que o esperado
	if(identify2(developer, 10) == 0) printf("b) developer: %s \n", developer);

	developer = (char*) realloc(developer, 10);
	if(developer == NULL) return -1;
	
	// identify com char* com alocacao menor que a esperada:
	// faz com que ocorra um crash na chamada do free()
	// ja que o strcpy() SOBRESCREVE UM ESPACO ALEM DO ALOCADO
	// assim, ao chamar o free(), o programa tenta apagar mais
	// do que deve, causando o invalid access
	// if(identify2(developer, 50) == 0) printf("c) developer: %s \n", developer);
	
	// identify com char* com alocacao e size menores que os esperados
	if(identify2(developer, 10) == 0) printf("d) developer: %s \n", developer);
	
	printf("\n");


	free(developer);
	return 0;
}
Beispiel #2
0
int main()
{	
	char buffer[256];
	
	identify2(buffer,256);
	puts(buffer);

	return 0;
}
Beispiel #3
0
/**
Chama da função identify2 da biblioteca e coloca o string de retorno na tela
*/
void cmdWho(void) {
    char name[256];
    int err = identify2(name, 256);
    if (err) {
        printf ("Erro: %d\n", err);
        return;
    }
    printf ("%s\n", name);
}
Beispiel #4
0
void loadpg( int net , int totalnodes )
{

int i , node1 , node2 , pnode , PorE , distance , splitL , capacity ;
int savepnode , bound1 , bound2 , j , pnode1 , pnode2 ;
QUADPTR qptr ;
GNODEPTR gptr , g2ptr , gptr1 , gptr2 ;
LIST2PTR lptr ;


qptr = pinlist ;
for( i = 1 ; i <= totalnodes ; i++ ) {
    node1 = qptr->node1 ;
    node2 = qptr->node2 ;
    distance = qptr->distance ;
    PorE = qptr->PorE ;
    j = identify2( &node1, &node2, distance, &bound1, &bound2, &gptr );
    if( j == 0 ) {
	fprintf(fpo,"pin number: %d of net: %d was supposed to ",
						    i , net ) ;
	fprintf(fpo,"lie between nodes: %d and %d\n", node1, node2);
	fprintf(fpo,"However, the graph doesn't have an edge ");
	fprintf(fpo,"between these two nodes\n");
	exit(0);
    } else if( j == 1 ) {
	fprintf(fpo,"pin number: %d of net: %d ", i , net ) ;
	fprintf(fpo,"specified to lie between nodes: %d and %d\n",
						node1 , node2 ) ;
	fprintf(fpo,"is not within the scope of this channel\n");
	exit(0);
    }
    splitL = bound2 - bound1 ;
    capacity = gptr->capacity ;
    if( node1 <= numnodes && node2 <= numnodes ) {
	gptr->length = VLARGE ;
	gptr->cost = VLARGE ;
	gptr = gnodeArray[node2] ;
	while( gptr->node != node1 ) {
	    gptr = gptr->next ;
	}
	gptr->length = VLARGE ;
	gptr->cost = VLARGE ;
    } else {
	if( gnodeArray[node1] == gptr ) {
	    gnodeArray[node1] = gptr->next ;
	    free( gptr ) ;
	} else {
	    g2ptr = gnodeArray[node1] ;
	    while( g2ptr->next != gptr ) {
		g2ptr = g2ptr->next ;
	    }
	    g2ptr->next = gptr->next ;
	    free( gptr ) ;
	}
	if( gnodeArray[node2]->node == node1 ) {
	    gptr = gnodeArray[node2] ;
	    gnodeArray[node2] = gnodeArray[node2]->next ;
	    free( gptr ) ;
	} else {
	    g2ptr = gnodeArray[node2] ;
	    while( g2ptr->next->node != node1 ) {
		g2ptr = g2ptr->next ;
	    }
	    gptr = g2ptr->next ;
	    g2ptr->next = gptr->next ;
	    free( gptr ) ;
	}
    }
    pnode = i + numnodes ;
    if( PorE == 1 ) {
	savepnode = i ;
	pnodeArray[i].eptr = 0 ;
    } else {
	lptr = pnodeArray[savepnode].equiv ;
	pnodeArray[i].eptr = savepnode ;
	pnodeArray[savepnode].equiv = (LIST2PTR) malloc(sizeof(LIST2));
	pnodeArray[savepnode].equiv->next = lptr ;
	pnodeArray[savepnode].equiv->node = i ;
    }
    distance -= bound1 ;
    gnodeArray[pnode] = (GNODEPTR) malloc( sizeof(GNODE) ) ;
    gnodeArray[pnode]->node = node1 ;
    gnodeArray[pnode]->length = distance ;
    gnodeArray[pnode]->ilength = distance ;
    gnodeArray[pnode]->cost = distance ;
    gnodeArray[pnode]->capacity = capacity ;
    gnodeArray[pnode]->inactive = 0 ;
    gnodeArray[pnode]->einactive = 0 ;
    gnodeArray[pnode]->next = (GNODEPTR) malloc( sizeof(GNODE) ) ;
    gnodeArray[pnode]->next->node = node2 ;
    gnodeArray[pnode]->next->length = splitL - distance ;
    gnodeArray[pnode]->next->ilength = splitL - distance ;
    gnodeArray[pnode]->next->cost = splitL - distance ;
    gnodeArray[pnode]->next->capacity = capacity ;
    gnodeArray[pnode]->next->inactive = 0 ;
    gnodeArray[pnode]->next->einactive = 0 ;
    gnodeArray[pnode]->next->next = (GNODEPTR) NULL ;

    gptr = gnodeArray[node1] ;
    gnodeArray[node1] = (GNODEPTR) malloc( sizeof(GNODE) ) ;
    gnodeArray[node1]->next = gptr ;
    gnodeArray[node1]->node = pnode ;
    gnodeArray[node1]->ilength = distance ;
    gnodeArray[node1]->length = distance ;
    gnodeArray[node1]->cost = distance ;
    gnodeArray[node1]->capacity = capacity ;
    gnodeArray[node1]->inactive = 0 ;
    gnodeArray[node1]->einactive = 0 ;

    gptr = gnodeArray[node2] ;
    gnodeArray[node2] = (GNODEPTR) malloc( sizeof(GNODE) ) ;
    gnodeArray[node2]->next = gptr ;
    gnodeArray[node2]->node = pnode ;
    gnodeArray[node2]->ilength = splitL - distance ;
    gnodeArray[node2]->length = splitL - distance ;
    gnodeArray[node2]->cost = splitL - distance ;
    gnodeArray[node2]->capacity = capacity ;
    gnodeArray[node2]->inactive = 0 ;
    gnodeArray[node2]->einactive = 0 ;

    qptr = qptr->next ;
}
for( i = 1 ; i <= totalnodes ; i++ ) {
    pnode1 = i + numnodes ;
    gptr = gnodeArray[pnode1] ;
    /* Mitch added check if gptr is null */
    for( ; gptr != (GNODEPTR) NULL ; gptr = (gptr ? gptr->next : gptr)) {
	pnode2 = gptr->node ;
	j = pnode2 - numnodes ;
	if( pnode2 <= numnodes || j < i ) {
	    continue ;
	}
	if( (pnodeArray[i].eptr != 0) && (pnodeArray[j].eptr != 0) ) {
	    if( pnodeArray[i].eptr != pnodeArray[j].eptr ) {
		continue ;
	    }
	} else if( pnodeArray[i].eptr == 0 && pnodeArray[j].eptr == 0){
	    continue ;
	} else {
	    if( pnodeArray[i].eptr != 0 ) {
		if( pnodeArray[i].eptr != j ) {
		    continue ;
		}
	    } else {
		if( pnodeArray[j].eptr != i ) {
		    continue ;
		}
	    }
	}
	gptr1 = gnodeArray[pnode1] ;
	gptr2 = gnodeArray[pnode2] ;
	gptr = gptr1 ;
	/* Mitch added check if gptr is null */
	for( ; gptr; ) {
	    if( gptr->node == pnode2 ) {
		gptr->cost = VLARGE ;
		break ;
	    }
	    gptr = gptr->next ;
	}
	gptr = gptr2 ;
	/* Mitch added check if gptr is null */
	for( ; gptr; ) {
	    if( gptr->node == pnode1 ) {
		gptr->cost = VLARGE ;
		break ;
	    }
	    gptr = gptr->next ;
	}
    }
}

return ;
}