我有一个头文件和两个源文件。
下面是我的
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。
我找不到更改未反映的原因。
您更改
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:将指针传递给变量