您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ stack_free函数代码示例

51自学网 2021-06-03 08:21:02
  C++
这篇教程C++ stack_free函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中stack_free函数的典型用法代码示例。如果您正苦于以下问题:C++ stack_free函数的具体用法?C++ stack_free怎么用?C++ stack_free使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了stack_free函数的28个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: test_move_card_should_not_change_stack_empty_stack_coordinates

void test_move_card_should_not_change_stack_empty_stack_coordinates() {  struct stack *origin, *destination;  struct card *card[2];  card_malloc(&card[0]);  card_malloc(&card[1]);  card_init(card[0]);  card_init(card[1]);  card_set(card[0], ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_0_BEGIN_X);  card_set(card[1], KING, HEARTS, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_1_BEGIN_X);  stack_malloc(&origin);  stack_malloc(&destination);  stack_init(origin);  stack_init(destination);  stack_push(&origin, card[0]);  stack_push(&destination, card[1]);  move_card(&origin, &destination);  assert(origin->card->frame->begin_y == MANEUVRE_BEGIN_Y);  assert(origin->card->frame->begin_x == MANEUVRE_0_BEGIN_X);  stack_free(origin);  stack_free(destination);}
开发者ID:HalosGhost,项目名称:tty-solitaire,代码行数:25,


示例2: test_move_card_from_non_stack_empty_stack_to_non_stack_empty_stack

void test_move_card_from_non_stack_empty_stack_to_non_stack_empty_stack() {  struct stack *origin, *destination;  struct card *card[6];  for (int i = 0; i < 6; i++) {    card_malloc(&card[i]);    card_init(card[i]);    card_set(card[i], TWO + i, i % 5, i % 2, 99, 99);  }  stack_malloc(&origin);  stack_malloc(&destination);  stack_init(origin);  stack_init(destination);  for (int i = 0; i < 3; i++) {    stack_push(&origin, card[i]);  }  for (int i = 3; i < 6; i++) {    stack_push(&destination, card[i]);  }  move_card(&origin, &destination);  assert(stack_length(origin) == 2);  assert(stack_length(destination) == 4);  assert(cards_equal(destination->card, card[2]));  assert(cards_equal(destination->next->card, card[5]));  stack_free(origin);  stack_free(destination);}
开发者ID:HalosGhost,项目名称:tty-solitaire,代码行数:30,


示例3: test_valid_move_from_stock_to_maneuvre_stacks

void test_valid_move_from_stock_to_maneuvre_stacks() {  struct stack *stock, *maneuvre_stacks[7];  stack_malloc(&stock);  stack_init(stock);  card_set(stock->card, ACE, SPADES, EXPOSED, STOCK_BEGIN_Y, STOCK_BEGIN_X);  for (int i = 0; i < 7; i++) {    stack_malloc(&maneuvre_stacks[i]);    stack_init(maneuvre_stacks[i]);  }  card_set(maneuvre_stacks[0]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_0_BEGIN_X);  card_set(maneuvre_stacks[1]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_1_BEGIN_X);  card_set(maneuvre_stacks[2]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_2_BEGIN_X);  card_set(maneuvre_stacks[3]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_3_BEGIN_X);  card_set(maneuvre_stacks[4]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_4_BEGIN_X);  card_set(maneuvre_stacks[5]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_5_BEGIN_X);  card_set(maneuvre_stacks[6]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_6_BEGIN_X);  for (int i = 0; i < 7; i++) {    assert(!valid_move(stock, maneuvre_stacks[i]));  }  stack_free(stock);  for (int i = 0; i < 7; i++) {    stack_free(maneuvre_stacks[i]);  }}
开发者ID:HalosGhost,项目名称:tty-solitaire,代码行数:25,


示例4: test_move_card_from_stack_empty_stack_to_non_stack_empty_stack

void test_move_card_from_stack_empty_stack_to_non_stack_empty_stack() {  struct stack *origin, *destination,               *new_origin, *new_destination,               *origin_duplicate, *destination_duplicate;  struct card *card;  card_malloc(&card);  card_init(card);  card_set(card, ACE, SPADES, EXPOSED, 0, 0);  stack_malloc(&origin);  stack_malloc(&destination);  stack_init(origin);  stack_init(destination);  new_origin = origin;  new_destination = destination;  stack_push(&new_destination, card);  origin_duplicate = stack_dup(origin);  destination_duplicate = stack_dup(destination);  move_card(&new_origin, &new_destination);  assert(origin == new_origin);  assert(stacks_equal(origin, origin_duplicate));  assert(destination == new_destination);  assert(stacks_equal(destination, destination_duplicate));  stack_free(origin);  stack_free(destination);}
开发者ID:HalosGhost,项目名称:tty-solitaire,代码行数:29,


示例5: identifier_moves_log

/** *  @brief Output moves of an id in a file * *  @return 0 If output was NULL *  @return 1 Otherwise * */int identifier_moves_log(Identifier data, FILE *output) {  if (output == NULL)    return 0;  Stack s, s2;  stack_alloc(&s);  identifier_to_stack(data, &s);  stack_alloc(&s2);  identifier_to_stack(data, &s2);  char strmove[5];  int move = 0, a, b, c, d;  fprintf(output, "MOVES : ");  while ((move = stack_pop(&s)) != -1) {    stack_expand(&a, &b, &c, &d, move);    strmove[0] = a + 'a';    strmove[1] = b + '1';    strmove[2] = c + 'a';    strmove[3] = d + '1';    strmove[4] = '/0';    fprintf(output, "%s ", strmove);  }  fprintf(output, "<-> ");  while ((move = stack_pop(&s2)) != -1) {    fprintf(output, "%d ", move);  }  fprintf(output, "/n");  stack_free(&s2);  stack_free(&s);  return 1;}
开发者ID:C40417,项目名称:chessaint,代码行数:42,


示例6: test_valid_move_from_maneuvre_stack_to_waste_pile

void test_valid_move_from_maneuvre_stack_to_waste_pile() {  struct stack *waste_pile, *maneuvre_stacks[7];  stack_malloc(&waste_pile);  stack_init(waste_pile);  card_set(waste_pile->card, ACE, SPADES, EXPOSED, WASTE_PILE_BEGIN_Y, WASTE_PILE_BEGIN_X);  for (int i = 0; i < 7; i++) {    stack_malloc(&maneuvre_stacks[i]);    stack_init(maneuvre_stacks[i]);  }  card_set(maneuvre_stacks[0]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_0_BEGIN_X);  card_set(maneuvre_stacks[1]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_1_BEGIN_X);  card_set(maneuvre_stacks[2]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_2_BEGIN_X);  card_set(maneuvre_stacks[3]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_3_BEGIN_X);  card_set(maneuvre_stacks[4]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_4_BEGIN_X);  card_set(maneuvre_stacks[5]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_5_BEGIN_X);  card_set(maneuvre_stacks[6]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_6_BEGIN_X);  for (int i = 0; i < 7; i++) {    assert(!valid_move(maneuvre_stacks[i], waste_pile));  }  stack_free(waste_pile);  for (int i = 0; i < 7; i++) {    stack_free(maneuvre_stacks[i]);  }}
开发者ID:HalosGhost,项目名称:tty-solitaire,代码行数:25,


示例7: main

int main(void){    int value = 10, v = 11, i;    Student s1 = {12, "student1", "addr1"},s2 = {13, "student2","a1"},             s3 = {15, "stu3", "address3"}, *sptr;    pStack ps = stack_new(sizeof(Student) + 20);    pStack p = stack_new(sizeof(int));    stack_push(p, &value);    stack_push(p, &v);    printf("%d/n", *((int*)stack_top(p)));    stack_pop(p);    printf("%d/n", *((int*)stack_top(p)));        stack_push(ps, &s1);    stack_push(ps, &s2);    sptr = (pStudent)stack_top(ps);    printf("no: %d, name: %s/n", sptr->no, sptr->addr);    stack_pop(ps);    stack_push(ps, &s3);    sptr = (pStudent)stack_top(ps);    printf("no: %d, name: %s/n", sptr->no, sptr->addr);    stack_free(ps);    for (i = 0; i < 100; i++) {        stack_push(p, &i);    }    for (i = 0; i < 100; i++) {        printf("%d ", *((int*)stack_top(p)));        stack_pop(p);    }    stack_free(p);    exit(EXIT_SUCCESS);}
开发者ID:qyh,项目名称:studio,代码行数:35,


示例8: main

int main(int argc, char **argv) {	int op;	int number;	stack_t st;	stack_init(&st, INITIAL_STACK_SIZE);	while ((op = get_next_operation(stdin, &number)) != OP_STACK_END) {		if (op == OP_STACK_PUSH) {			stack_push(&st, number);		}		else if (op == OP_STACK_POP) {			if (stack_is_empty(&st)) {				printf("POP from empty stack./n");			}			else {				printf("%d/n", stack_pop(&st));			}		}		else {			fprintf(stderr, "Unexpected operation./n");			stack_free(&st);			exit(EXIT_FAILURE);		}	}	stack_free(&st);	return EXIT_SUCCESS;}
开发者ID:errbufferoverfl,项目名称:algorithms_and_analysis,代码行数:30,


示例9: type_constrain_ari

struct stack * type_constrain_ari(struct elt *e1, struct elt *e2){	struct stack *types, *tmp1, *tmp2;	// these will modify the type of e1 and e2 to match arithmetic operation.	// if possible.	if (type_vartype_constrain_ari(e1) == 0) { return NULL; }	if (type_vartype_constrain_ari(e2) == 0) { return NULL; }	if (e1->elttype == E_REG) {		tmp1 = e1->reg->types;	} else {		tmp1 = stack_new();		stack_push(tmp1, &possible_types[(int)e1->cst->type]);	}	if (e2->elttype == E_REG) {		tmp2 = e2->reg->types;	} else {		tmp2 = stack_new();		stack_push(tmp2, &possible_types[(int)e2->cst->type]);	}	types = type_inter(tmp1, tmp2);	if (stack_size(types) == 0) { // float + int		stack_push(types, &possible_types[FLO_T]);	}	if (e1->elttype == E_CST) { stack_free(&tmp1, NULL); }	if (e2->elttype == E_CST) { stack_free(&tmp2, NULL); }	return types;}
开发者ID:uOptim,项目名称:rubic-enseirb,代码行数:33,


示例10: instr_free

void instr_free(void *instruction){	struct instr *i = (struct instr *) instruction;	if (i->optype == I_RAW) { free(i->rawllvm); }	else if (i->optype == I_CAST) {		elt_free(i->res);		elt_free(i->tocast);	}	else if (i->optype == I_CAL) {		free(i->fn);		stack_free(&i->args, elt_free);		stack_free(&i->ret->reg->types, NULL);		elt_free(i->ret);	}	else {		// do not free vr it is used in the global hashmap.		if (i->er != NULL) { elt_free(i->er); }		if (i->e1 != NULL) { elt_free(i->e1); }		if (i->e2 != NULL) { elt_free(i->e2); }	}	free(i);}
开发者ID:uOptim,项目名称:rubic-enseirb,代码行数:27,


示例11: test_valid_move_from_maneuvre_stack_to_foundation_stacks

void test_valid_move_from_maneuvre_stack_to_foundation_stacks() {  struct stack *foundation_stacks[4];  struct stack *maneuvre_stacks[7];  for (int i = 0; i < 4; i++) {    stack_malloc(&foundation_stacks[i]);    stack_init(foundation_stacks[i]);  }  card_set(foundation_stacks[0]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_0_BEGIN_X);  card_set(foundation_stacks[1]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_1_BEGIN_X);  card_set(foundation_stacks[2]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_2_BEGIN_X);  card_set(foundation_stacks[3]->card, ACE, SPADES, EXPOSED, FOUNDATION_BEGIN_Y, FOUNDATION_3_BEGIN_X);  for (int i = 0; i < 7; i++) {    stack_malloc(&maneuvre_stacks[i]);    stack_init(maneuvre_stacks[i]);  }  card_set(maneuvre_stacks[0]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_0_BEGIN_X);  card_set(maneuvre_stacks[1]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_1_BEGIN_X);  card_set(maneuvre_stacks[2]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_2_BEGIN_X);  card_set(maneuvre_stacks[3]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_3_BEGIN_X);  card_set(maneuvre_stacks[4]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_4_BEGIN_X);  card_set(maneuvre_stacks[5]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_5_BEGIN_X);  card_set(maneuvre_stacks[6]->card, ACE, SPADES, EXPOSED, MANEUVRE_BEGIN_Y, MANEUVRE_6_BEGIN_X);  for (int i = 0; i < 7; i++) {    for (int j = 0; j < 4; j++) {      assert(valid_move(maneuvre_stacks[i], foundation_stacks[j]));    }  }  for (int i = 0; i < 4; i++) {    stack_free(foundation_stacks[i]);  }  for (int i = 0; i < 7; i++) {    stack_free(maneuvre_stacks[i]);  }}
开发者ID:HalosGhost,项目名称:tty-solitaire,代码行数:35,


示例12: type_vartype_constrain_ari

static int type_vartype_constrain_ari(struct elt *e){	int ret = 0;	struct stack *tmp, *inter;	// TODO: Init this only once at the begining	tmp = stack_new();	stack_push(tmp, &possible_types[FLO_T]);	stack_push(tmp, &possible_types[INT_T]);	if (e->elttype == E_REG) {		inter = type_inter(tmp, e->reg->types);		ret = stack_size(inter);		if (ret != 0) {			// replace old stack with the new one			reg_settypes(e->reg, inter);		}		stack_free(&inter, NULL);	} 		else {		if (e->cst->type != FLO_T && e->cst->type != INT_T) {			ret = 0;		} else {			ret = 1;		}	}	stack_free(&tmp, NULL);	return ret;}
开发者ID:uOptim,项目名称:rubic-enseirb,代码行数:34,


示例13: test_valid_move_from_waste_pile_to_stock

void test_valid_move_from_waste_pile_to_stock() {  struct stack *stock, *waste_pile;  stack_malloc(&stock);  stack_malloc(&waste_pile);  stack_init(stock);  stack_init(waste_pile);  card_set(stock->card, ACE, SPADES, EXPOSED, STOCK_BEGIN_Y, STOCK_BEGIN_X);  card_set(waste_pile->card, KING, HEARTS, EXPOSED, WASTE_PILE_BEGIN_Y, WASTE_PILE_BEGIN_X);  assert(!valid_move(waste_pile, stock));  stack_free(stock);  stack_free(waste_pile);}
开发者ID:HalosGhost,项目名称:tty-solitaire,代码行数:13,


示例14: queuePop

/* Removes the element from front of queue */void queuePop(Queue *queue) {  Stack* tmp_ptr = stack(queue->size);  while(size(queue->stk_ptr) > 1) {    push(tmp_ptr, peek(queue->stk_ptr));    pop(queue->stk_ptr);  }  stack_free(queue->stk_ptr);  Stack* tmp_ptr2 = stack(queue->size);  while(!is_empty(tmp_ptr)) {    push(tmp_ptr2, peek(tmp_ptr));    pop(tmp_ptr);  }  stack_free(tmp_ptr);  queue->stk_ptr = tmp_ptr2;}
开发者ID:zhouhaibing089,项目名称:Leetcode,代码行数:16,


示例15: stack_print

void stack_print(rpn_stack *stack){    rpn_stack *aux1 = stack, *aux2 = NULL;    int count = stack_count(stack);    while(aux1 != NULL){        stack_push(&aux2, aux1->value);        aux1 = aux1->next;    }    stack_free(&aux1);    while(aux2 != NULL){        printf("%i: %Lf/n", count, aux2->value);        aux2 = aux2->next;        count--;    }    stack_free(&aux2);}
开发者ID:rafaelmartins,项目名称:rpnshell,代码行数:15,


示例16: main

intmain() {  int retval;  char cont;  struct stack *stack;  stack = stack_new(STACK_SIZE);  cont = 1;  while(cont) {    retval = interact(stack);    switch (retval) {    case EXIT_OP:      cont = 0;      break;    case INVALID_CHAR:      printf("Invalid char!/n");      break;    case STACK_UNDERFLOW:      printf("Stack underflow!/n");      break;    case STACK_OVERFLOW:      printf("Stack overflow!/n");      break;    default:      continue;    }  }  stack_free(stack);  return 0;}
开发者ID:oleks,项目名称:components,代码行数:33,


示例17: stack_check

void stack_check(){    printf("Testing Stack Functions/n");    Stack *s;    s = stack_init(); assert_i(stack_size(s), 0, "Check Stack Size after init");    stack_push(s, 1, -1); assert_i(stack_size(s), 1, "Check Stack Size after Push");    stack_push(s, 2, -2); assert_i(stack_size(s), 2, "Check Stack Size after Push");    stack_push(s, 3, -3); assert_i(stack_size(s), 3, "Check Stack Size after Push");    int x, y;    stack_pop(s, &x, &y);        assert_p(x, y, 3, -3, "Check Pop");        assert_i(stack_size(s), 2, "Check Size after Pop");    stack_pop(s, &x, &y);        assert_p(x, y, 2, -2, "Check Pop");        assert_i(stack_size(s), 1, "Check Size after Pop");    stack_push(s, 6, -6); assert_i(stack_size(s), 2, "Check Stack Size after Push");    stack_pop(s, &x, &y);        assert_p(x, y, 6, -6, "Check Pop");        assert_i(stack_size(s), 1, "Check Size after Pop");    stack_pop(s, &x, &y);        assert_p(x, y, 1, -1, "Check Pop");        assert_i(stack_size(s), 0, "Check Size after Pop");    stack_free(s);}
开发者ID:TRex22,项目名称:DDS_Group_Work,代码行数:27,


示例18: istore

struct instr * istore(struct var *vr, struct elt *elt){	struct instr *i;	struct stack *typeinter;	if (elt->elttype == E_REG) {		typeinter = type_inter(vr->t, elt->reg->types);		if (stack_size(typeinter) == 0) {			fprintf(stderr, "Error: Incompatible types in assignment./n");			return NULL;		}		reg_bind(elt->reg, vr);		reg_settypes(elt->reg, typeinter);		stack_free(&typeinter, NULL);		i = instr_new(I_STO, vr, elt, NULL, NULL);	}	else {		stack_clear(vr->t, NULL);		stack_push(vr->t, &possible_types[(int)elt->cst->type]);		i = instr_new(I_STO, vr, elt, NULL, NULL);	}	return i;}
开发者ID:uOptim,项目名称:rubic-enseirb,代码行数:28,


示例19: seed_list_free

fit_recipe::~fit_recipe(){    seed_list_free(seeds_list);    fit_parameters_free(parameters);    stack_free(stack);    delete ms_setup;}
开发者ID:franko,项目名称:regress-pro,代码行数:7,


示例20: multi_fit_engine_free

voidmulti_fit_engine_free(struct multi_fit_engine *f){    int k;    if(f->stack_list) {        for(k = 0; k < f->samples_number; k++) {            if(f->stack_list[k] != NULL) {                stack_free(f->stack_list[k]);            }        }        free(f->stack_list);    }    /* we don't free each spectrum because we are not the owner */    free(f->spectra_list);    /* we don't free f->common_parameters and f->private_parameters       because multi_fit_engine does not own these data */    assert(f->initialized == 0);    free(f);}
开发者ID:lyz4534,项目名称:regress-pro,代码行数:25,


示例21: stack_destroy

void stack_destroy(unsigned long extent) {   struct stack *esp = STACK_PTR; //get the stack pointer  struct stack *to = (struct stack*)extent;  struct variable *var;  while(esp < to) {    /*Pop up the stack */    var = stack_pop();   #ifdef DEBUG    if(var->key) {       err(0,"Removing variable :%s/n",var->key);    }   #endif    stack_free(var); //free up var    esp = STACK_PTR;  //reset stack pointer  }}
开发者ID:karthick18,项目名称:simple-interpreter,代码行数:28,


示例22: create_thread

/* Create a new thread. It should be passed "fcn", a function which * takes two arguments, (the second one is a dummy, always 4). The * first argument is passed in "arg". Returns the TID of the new * thread */static pid_tcreate_thread(int (*fcn)(void *), void *arg, void **stack){    pid_t newpid;    int flags;    void *my_stack;    my_stack = stack_alloc(THREAD_STACK_SIZE);    /* need SIGCHLD so parent will get that signal when child dies,     * else have errors doing a wait */    flags = SIGCHLD | CLONE_THREAD | CLONE_VM |        /* CLONE_THREAD => no signal to parent on termination; have to use         * CLONE_CHILD_CLEARTID to get that.  Since we're using library call         * instead of raw system call we don't have child_tidptr argument,         * so we set the location in the child itself via set_tid_address(). */        CLONE_CHILD_CLEARTID |        CLONE_FS | CLONE_FILES | CLONE_SIGHAND;    newpid = clone(fcn, my_stack, flags, arg);    /* this is really a tid since we passed CLONE_THREAD: child has same pid as us */    if (newpid == -1) {        fprintf(stderr, "smp.c: Error calling clone/n");        stack_free(my_stack, THREAD_STACK_SIZE);        return -1;    }    *stack = my_stack;    return newpid;}
开发者ID:DavidEGrayson,项目名称:dynamorio,代码行数:33,


示例23: main

intmain(){    int i;    sleeptime.tv_sec = 0;    sleeptime.tv_nsec = 10 * 1000 * 1000; /* 10ms */    /* parent remains in own group. creates child who creates a thread group     * and then exits them all     */    for (i = 0; i < NUM_THREADS; i++) {        child_started[i] = false;        child_exit[i] = false;    }    child[0] = create_thread(run, (void *)(long)0, &stack[0], false);    assert(child[0] > -1);    /* wait for child to start rest of threads */    for (i = 0; i < NUM_THREADS; i++) {        while (!child_started[i]) {            /* waste some time: FIXME: should use futex */            nanosleep(&sleeptime, NULL);        }    }    child_exit[0] = true;    while (!child_done[0])        nanosleep(&sleeptime, NULL);    delete_thread(child[0], stack[0]);    for (i = 1; i < NUM_THREADS; i++)        stack_free(stack[i], THREAD_STACK_SIZE);}
开发者ID:djmott,项目名称:dynamorio,代码行数:32,


示例24: create_thread

/* Create a new thread. It should be passed "fcn", a function which * takes two arguments, (the second one is a dummy, always 4). The * first argument is passed in "arg". Returns the TID of the new * thread */static pid_tcreate_thread(int (*fcn)(void *), void *arg, void **stack, bool same_group){    pid_t newpid;    int flags;    void *my_stack;    my_stack = stack_alloc(THREAD_STACK_SIZE);    /* need SIGCHLD so parent will get that signal when child dies,     * else have errors doing a wait */    flags = SIGCHLD | CLONE_VM |        /* CLONE_THREAD => no signal to parent on termination; have to use         * CLONE_CHILD_CLEARTID to get that.  Since we're using library call         * instead of raw system call we don't have child_tidptr argument,         * so we set the location in the child itself via set_tid_address(). */        CLONE_CHILD_CLEARTID | CLONE_FS | CLONE_FILES | CLONE_SIGHAND;    if (same_group)        flags |= CLONE_THREAD;    /* XXX: Using libc clone in the child here really worries me, but it seems     * to work.  My theory is that the parent has to call clone, which invokes     * the loader to fill in the PLT entry, so when the child calls clone it     * doesn't go into the loader and avoiding the races like we saw in i#500.     */    newpid = clone(fcn, my_stack, flags, arg);    /* this is really a tid if we passed CLONE_THREAD: child has same pid as us */    if (newpid == -1) {        nolibc_print("smp.c: Error calling clone/n");        stack_free(my_stack, THREAD_STACK_SIZE);        return -1;    }    *stack = my_stack;    return newpid;}
开发者ID:djmott,项目名称:dynamorio,代码行数:39,


示例25: thread_deallocate

voidthread_deallocate(	thread_t			thread){	task_t				task;	if (thread == THREAD_NULL)		return;	if (thread_deallocate_internal(thread) > 0)		return;	ipc_thread_terminate(thread);	task = thread->task;#ifdef MACH_BSD 	{		void *ut = thread->uthread;		thread->uthread = NULL;		uthread_zone_free(ut);	}#endif  /* MACH_BSD */   	task_deallocate(task);	if (thread->kernel_stack != 0)		stack_free(thread);	machine_thread_destroy(thread);	zfree(thread_zone, thread);}
开发者ID:MACasuba,项目名称:MACasuba-Utils-git,代码行数:34,


示例26: inorderTraversal

int * inorderTraversal(struct TreeNode *root, int *returnSize){    int idx, *list = (int *)malloc(sizeof(int) * 256); /* ~~, implement a list? */    struct TreeNode *node;    Stack *stack = stack_new(sizeof(struct TreeNode *));    idx = 0;    node = root;    while (node != NULL) {        stack_push(stack, &node);        node = node->left;    }    while (!stack_is_empty(stack)) {        stack_pop(stack, &node);        list[idx++] = node->val;        node = node->right;        while (node != NULL) {            stack_push(stack, &node);            node = node->left;        }    }    stack_free(stack);    *returnSize = idx;    return list;}
开发者ID:damnever,项目名称:Note,代码行数:26,


示例27: stack_init

struct stack *stack_init(int size){	struct stack *stack = NULL;	if (size < 1) {		return NULL;	}	stack = malloc(sizeof(*stack));	if (!stack) {		goto err;	}	stack->array = calloc(size, sizeof(int));	if (!stack->array) {		goto err;	}	stack->top = -1;	stack->size = size;	return stack;err:	stack_free(stack);	return NULL;}
开发者ID:dzeban,项目名称:cs,代码行数:27,


示例28: create_thread

/* Create a new thread. It should be passed "fcn", a function which * takes two arguments, (the second one is a dummy, always 4). The * first argument is passed in "arg". Returns the PID of the new * thread */static pid_tcreate_thread(int (*fcn)(void *), void *arg, void **stack){    pid_t newpid;     int flags;    void *my_stack;    my_stack = stack_alloc(THREAD_STACK_SIZE);    /* need SIGCHLD so parent will get that signal when child dies,     * else have errors doing a wait */    /* we're not doing CLONE_THREAD => child has its own pid     * (the thread.c test tests CLONE_THREAD)     */    flags = (SIGCHLD | CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND);    newpid = clone(fcn, my_stack, flags, arg, &p_tid, NULL, &c_tid);    if (newpid == -1) {        print("smp.c: Error calling clone/n");        stack_free(my_stack, THREAD_STACK_SIZE);        return -1;    }    *stack = my_stack;    return newpid;}
开发者ID:Arunpreet,项目名称:dynamorio,代码行数:30,



注:本文中的stack_free函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ stack_get函数代码示例
C++ stack_destroy函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。