传递给函数时结构指针不更新

问题描述 投票:0回答:1

我有一个头文件和两个源文件。

下面是我的

tpool_pq.h
文件中的代码。

typedef enum priority_t {LOW = 1, MEDIUM = 3, HIGH = 5} priority_t;

typedef struct task_t {
    void (*function)();
    void *arguments;
    priority_t priority;
} task_t;

typedef struct tpool_pq {
    task_t *task_array;
    int n_tasks;
    int queue_size;
} tpool_pq_t;

int init_tpool_pq(tpool_pq_t *tpool_pq, int queue_size);

源文件

tpool_pq.c

#include "tpool_pq.h"
#include <stdio.h>

int init_tpool_pq(tpool_pq_t *tpool_pq, int queue_size) {

    if ((tpool_pq = (tpool_pq_t *) malloc(sizeof(struct tpool_pq))) == NULL)
        printf("malloc returned null\n");
    
    tpool_pq->n_tasks = 0;
    tpool_pq->queue_size = queue_size;
    tpool_pq->task_array = (task_t *)malloc(sizeof(task_t)*queue_size);
}

main.c中的代码

#include <stdio.h>
#include "tpool_pq.h"

void main() {
    tpool_pq_t *pq;
    int task_queue_size = 32;
    init_tpool_pq(pq, task_queue_size);
    printf("size: %d \n", pq->queue_size);
    
}

指针

pq
被传递到
init_tpool_pq()
init_tpool_pq
中的更改不会反映在函数外部。
printf
中的
main.c
语句将大小打印为一些垃圾值
1230389504
而不是32。

我找不到更改未反映的原因。

c pointers struct
1个回答
0
投票

您更改

init_tpool_pq
tpool_pq
。这是与
main
pq
不同的变量。


选项 1:返回指针

tpool_pq_t *init_tpool_pq( size_t queue_size ) {
   tpool_pq_t *tpool_pq = malloc( sizeof( struct tpool_pq ) );
   if ( !tpool_pq  )
      goto ERROR1;

   task_t *task_array = malloc( sizeof( task_t ) * queue_size );
   if ( !task_array )
      goto ERROR2;
    
   tpool_pq->n_tasks    = 0;
   tpool_pq->queue_size = queue_size;
   tpool_pq->task_array = task_array;

   return tpool_pq;

ERROR2:
   free( tpool_pg );
ERROR1:
   return NULL;
}

int main( void ) {
   size_t task_queue_size = 32;

   tpool_pq_t *pq = init_tpool_pq( task_queue_size );
   if ( !pq ) {
      perror( "init_tpool_pq" );
      exit( EXIT_FAILURE );
   }

   ...
}

选项 2:将指针传递给变量

© www.soinside.com 2019 - 2024. All rights reserved.