c - 将 int 传递给 C 回调

标签 c callback

为什么我在回调中没有被正确识别?

我想这可能是因为在 add_strip() "i"被销毁之后,我怎么能将一个 int 传递给那个回调?谢谢。

29 void add_strip(int i,char name[30]){
30     sl[i] = elm_slider_add(win);
31     elm_slider_label_set(sl[i], name);
32     elm_slider_unit_format_set(sl[i], "dB");
33     elm_slider_span_size_set(sl[i], 60);
34     evas_object_size_hint_align_set(sl[i], 0.5, EVAS_HINT_FILL);
35     evas_object_size_hint_weight_set(sl[i], 0.0, EVAS_HINT_EXPAND);
36     elm_slider_indicator_format_set(sl[i], "%3.0f");
37     elm_slider_min_max_set(sl[i], 0, 2);
38     elm_slider_inverted_set(sl[i], 1);
39     elm_slider_value_set(sl[i], 0);
40     elm_object_scale_set(sl[i], 1.0);
41     elm_slider_horizontal_set(sl[i], 0);
42     elm_box_pack_end(bx, sl[i]);
43     evas_object_show(sl[i]);
44     evas_object_smart_callback_add(sl[i], "changed", vol_changed, &i);  // <--------------
45 }

回调是:

13 static void
14 vol_changed(void *data, Evas_Object *obj, void *event_info)
15 {
16     int n = *((int*)data);
17     printf("%d\n", &n); // <------------------------------------- this prints always -1078364196 (seems an address)
18
19     if(lo_send(dest, "/fader/0", "f", elm_slider_value_get(sl[0]))==-1)
20         printf("OSC error %d: %s\n", lo_address_errno(dest), lo_address_errstr(d    est));
21 }

最佳答案

您正在将局部变量的地址作为参数传递给回调。所以当函数退出时,变量被释放。它的地址现在无效。当回调被调用时,您的局部变量的地址很可能被其他东西使用,这解释了奇怪的(和不同的)值。

此外,如其他帖子所述,您输入错误的片段集。

关于c - 将 int 传递给 C 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1889805/

相关文章:

javascript - 定义自定义 Javascript 函数的回调

c++ - 谁能向我解释这部分代码

c - 为什么排序后数组元素发生了变化,C

c - getopt 无法识别 c 中的多个命令行标志

c - 使用 fread 和 fwrite

Javascript 回调 - 为什么它不起作用?

javascript - 嵌套回调 future /现在

python - 如何将变量传递给 re.sub 回调?

c - org.bluez.GattCharacteristic1 WriteValue 方法

c - 读取文件内容时出现堆 block 错误