【问题标题】:Corrupted ints and sscanf -- and other C related memory issues损坏的 int 和 sscanf——以及其他与 C 相关的内存问题
【发布时间】:2011-02-13 10:00:03
【问题描述】:

我有一个函数control(),它是线程化的。它调用另一个函数来解析一些服务器响应。这是一些冗长的初始化,无法解决我的问题。

    int oct1 = 0;
    int oct2 = 0;
    int oct3 = 0;
    int oct4 = 0;
    int p1 = 0;
    int p2 = 0;

    sscanf(passive_ip, "%i,%i,%i,%i,%i,%i", &oct1, &oct2, &oct3, &oct4, &p1, &p2);

我经常发现我的结果搞砸了。例如:

S->C: 227 Entering Passive Mode (128,111,40,221,206,170)
The Parsed Result: 128.111.40.221 206,170

S->C: 227 Entering Passive Mode (128,111,40,221,80,8)
The Parsed Result: 128.111.40.221 80,8170

S->C: 227 Entering Passive Mode (128,111,40,221,241,196)
The Parsed Result: 128.111.40.221 241,196

S->C: 227 Entering Passive Mode (128,111,40,221,70,216)
The Parsed Result: 128.111.40.221 70,2166

注意旧值是如何被新值附加/混杂在一起的。关于为什么会发生这种情况的任何线索?

【问题讨论】:

    标签: c memory-management memory-leaks scanf


    【解决方案1】:

    您似乎忘记终止passive_ip。无论你在做什么,都应该确保以一个终止的空字节结束它。

    【讨论】:

    • @David,我认为你是对的。我现在意识到passive_ip 是一个全局变量,这意味着所有线程都在访问它并使用它们的各种端口号更新它。这一定是那里混乱的一部分。更糟糕的是,它是逐个字符更新的(因为我第一次写这篇文章时,我想不出更好的方法来解析 IP :D)。正如@rlibby 所建议的那样,终止它也会有所帮助......但我想我只是将解析器重写为 sscanf IP,然后从中删除全局性。如果可行,我会尽快为它打勾!
    猜你喜欢
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 2021-03-05
    • 1970-01-01
    • 2010-12-29
    • 2012-05-27
    相关资源
    最近更新 更多