函数不断返回0

时间:2018-12-27 23:32:56

标签: c pointers

我内部有一个三个函数,它们使用与代码中所示相同的输入,每当我通过三个函数后打印这些输入时,我都会得到一个“ 0”作为值。

我试图删除“ free()”,因为我认为这是因为我的输入的值获得了0,但如果这样做,代码将冻结。

int Timeout;
char passcode[20];

void configuration(int *d, char *c) {

  c = malloc(20 * sizeof(char));

  d = malloc(sizeof(int));

  *d = *d + 1;

  readn(d, c);

  free(c);

  free(d);

  return;
}

void readn(int *d, char *c) {

  c = malloc(20 * sizeof(char));

  d = malloc(sizeof(int));

  *d = *d + 2;

  configuration_SYS(d, c);

  free(c);

  free(d);

  return;
}

void configuration_SYS(int *d, char *c) {

  char *mdp = malloc(sizeof(20));
  mdp = "1234";

  c = malloc(20 * sizeof(char));
  d = malloc(sizeof(int));

  c = mdp;
  *d = *d + 3;


  free(mdp);

  return;
}

void main() {
  configuration(&Timeout, passcode);
  printf("%d\n", Timeout);

  for (int i = 0; i < 20; i++) {
    printf("%c", passcode[i]);
  }
}

当我打印两个变量时,我期望得到一个不同于0的值。 超时应等于6,密码=“ 1234”。

1 个答案:

答案 0 :(得分:1)

  • 您不必每次使用指针都使用malloc()malloc()分配空间供您使用。 注意:此空间不一定要初始化(意味着数据可以是任何值)
  • 在void函数的末尾不需要return;。右括号将为您返回。
  • 您使用两个参数调用configuration_SYS(char* abc, int* d, char* c),但是该函数需要三个参数。

实际上,我无法编译该程序。我不确定为什么它会为您显示0。我将致力于创建一个Minimal Complete Verifiable Example