[英]Pass void pointer as function parameter and cast it to timeval array
假設我有一個函數calc_sum()
,我想測量它的執行時間。 我有一個回調函數info_callback()
,它輸出一條消息並計算執行時間,它以void指針為參數。 我想將void*
struct timeval *
轉換為struct timeval *
以檢索執行時間的開始/結束並計算差異,但是我不明白如何將指針傳遞給struct timeval *
數組,以便可以從info_callback()
功能。 無論我嘗試什么,都會遇到細分錯誤...
我應該如何傳遞和強制轉換指針才能使其正常工作?
編輯:按Andy Schweig建議修復代碼中的錯誤
#include <stdio.h>
#include <sys/time.h>
void calc_sum(int a, int b)
{
int k = a + b;
printf("sum = %d\n", k);
}
void info_callback(const char *msg, void *client_data)
{
struct timeval *t = (struct timeval *) client_data;
double time = (t[1].tv_sec - t[0].tv_sec) * 1000.0; // !!!SEGMENTATION FAULT!!!
time += (t[1].tv_usec - t[0].tv_usec) / 1000.0; //
printf("[TIME] %s: %f, ms", msg, time);
}
int main(int argc, char *argv[])
{
struct timeval t1, t2;
gettimeofday(&t1, NULL);
calc_sum(2, 3);
gettimeofday(&t2, NULL);
struct timeval * tr = (struct timeval*) malloc(2 * sizeof(struct timeval));
tr[0] = t1;
tr[1] = t2;
double time = (tr[1].tv_sec - tr[0].tv_sec) * 1000.0; // sec to ms
time += (tr[1].tv_usec - tr[0].tv_usec) / 1000.0; // us to ms
printf("time = %f, ms\n", time);
info_callback("Execution time", tr);
free(tr);
}
您應該將tr
傳遞給info_callback
而不是&tr
。 tr
指向您分配的數組; &tr
是指向指針tr
的指針。
順便說一句,使用void *
代替實際類型的任何特殊原因? 如果您使用的是實際類型,則編譯器會對此進行標記。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.