搜索
bottom↓
回复: 90

C 程序中与存储器相关的常见错误(顺便送点好东西)

  [复制链接]

出0入0汤圆

发表于 2012-10-3 16:38:44 | 显示全部楼层 |阅读模式
本帖最后由 monkerman 于 2012-10-3 22:02 编辑

原来斜体的语法是 [] 里一个 i 呀? 哈哈.....我说怎么听突然就斜体了? 跟 注释符 "/*" 没有 "*/" 一样.  学习了!! 哈哈......现在我把 [] 里的 i 全换成 j/k 了.

============================================================================================================================
对于书写 C 语言程序的程序员而言, 与存储器有关的错误是非常让人郁闷无语的, 因为不管是在空间还是时间上, 错误和异常通常是在距离错误根源有一段时间或空间距离上才表现出来. 给查找真正的错误源带来很大困难. 将错误的数据写到错误的位置, 程序可能在最终失败前运行了好几个小时甚至几天几月(嵌入式系统),  但是程序的错误已经离真正的源头很远了, 呈现的错误也好像是"刻舟求剑"的结果, 只有刀痕没有剑.
下面就来摘录一些常见的错误:


1. 间接引用坏指针(Dereferencing Bad Pointers)

在进程的虚拟地址空间中有较大的洞, 没有映射到任何有意义的数据. 如果我们试图间接引用一个指向这些洞的指针, 那么操作系统就会以段异常(segmentation exception)中止我们的程序. 而且, 虚拟存储器的某些区域是只读的. 试图写这些区域将会以保护异常(protection exception)中止这个程序.
间接引用坏指针的一个常见实例就是经典的 scanf 错误. 假设我们想要使用 scanf 从 stdin 读一个整数到一个变量. 正确的方法是传递给 scanf 一个格式串和变量的地址:
scanf("%d", &val); // 正确的方法
然而, 对于初学 C 语言的人而言, 很容易传递 val 的内容, 而不是他的地址:
scanf("%d", val);  // 错误的方式
// GCC 一般会给出警告:格式 ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat]|
在这种情况下, scanf 将把变量的内容解释为一个地址, 并试图将一个字写到这个位置. 在最好的情况下, 程序立即以异常中止. 在最糟糕的情况下, val 的内容将对应于虚拟存储器的某个合法的读/写区域, 于是我们就覆盖了存储器, 这通常会在相当长的时间后才会造成灾难性且令人困惑的后果.


2. 读未初始化的存储器(Reading Uninitialized Memory)

虽然 bss 存储器位置(未初始化的全局变量)总是被加载器初始化为零(链接器一般会分配有 BSS 段), 但是对于堆存储器(heap memory)却不是这样的. 一个常见的错误就是假设堆存储器被初始化为零:
/* Return y = Ax */
int *matvec(int **A, int *x, int n)
{
    int k, j;

    int *y = (int *)malloc(n * sizeof(int));
    for (k = 0; k < n; k++)
        for (j = 0; j < n; j++)
            y[k] += A[k][j] * x[j];
    return y;
}
在这个例子中, 程序员不正确的假设向量(vector) y 被初始化为零. 正确的实现方式是显示的将 y[k] 设置为零, 或者是使用calloc函数.


3. 允许栈缓冲区溢出(Allowing Stack Buffer Overflows)

如果一个程序不检查输入串的大小就写入栈中的目标缓冲区, 那么这个程序就会有缓冲区溢出错误(buffer overflow bug). 例如, 下面的函数就有缓冲区溢出错误, 因为 gets 函数拷贝一个任意长度的串到缓冲区. 为了纠正这些错误, 我们必须使用 fgets 函数, 这个函数限制了输入串的大小:
void bufoverflow()
{
    char buf[64];

    gets(buf); /* Here is the stack buffer overflow bug */

    return;
}


4. 假设指针和他们指向的对象是相同大小的(Assuming that Pointers and the Objects They Point to Are the Same Size)

一个常见的错误是假设指向对象的指针和他们所指向的对象是相同大小的:
/* Create an nxm array */
int **makeArray1(int n, int m)
{
    int k;
    int **A = (int **)malloc(n * sizeof(int)); // 这个......

    for (k = 0; k < n; k++)
        A[k] = (int *)malloc(m * sizeof(int));
    return A;
}
这里的目的是创建一个由 n 个指针组成的数组, 每个指针都指向一个包含 m 个 int 的数组. 然而, 因为程序员在第五行将 sizeof(int *) 写成了 sizeof(int), 代码实际上创建一个 int 的数组.
这段代码只有在 int 和指向 int 的指针大小相同的机器上运行良好. 但是, 如果我们在像 core i7 这样的机器上运行这段代码, 其中指针大于 int, 那么第七行和第八行的循环将写到超过 A 数组结尾的地方. 因为这些字中的一个很可能是已分配块的边界标记脚部, 所以我们可能不会发现这个错误, 直到我们在这个程序的后面很久释放这个块时, 此时, 分配器中的合并代码会戏剧性的失败, 而没有任何明显的原因. 这是"在远处起作用(action at distance)" 的一个隐秘示例, 这个"action  at distance" 是与存储器有关(memory-related)的编程错误的典型情况.


5. 造成错位错误(Making Off-by-One Errors)

错位(off-by-one)错误是另一个很常见的覆盖错误来源:
/* Create an nxm array */
int **makeArray2(int n, int m)
{
    int j;
    int **A = (int **)malloc(n * sizeof(int *));

    for (j = 0; j <= n; j++)
        A[j] = (int *)malloc(m * sizeof(int));
    return A;
}

这里我们创建一个 n 个元素的指针数组, 但是随后在第 7 行和第 8 行试图初始化这个数组的 n + 1 个元素, 在这个过程中覆盖了数组 A 后面的某个存储器位置.


6. 引用指针, 而不是他所指向的对象(Referencing a Pointer Instead of the Object It Points to)

如果不注意 C 操作符的优先级和结合性, 我们就会错误的操作指针, 而不是他所指向的对象. 比如, 下面的这个函数, 其目的是删除一个有 *size 项的二叉堆里的第一项, 然后对剩下的 *size - 1 项重新建堆:
int *binheapDelete(int **binheap, int *size)
{
    int *packet = binheap[0];

    binheap[0] = binheap[*size - 1];
    *size--;     /* This should be (*size)-- */
    heapify(binheap, *size, 0);
    return(packet);
}
在第 6 行, 目的是减少 size 指针指向的整数的值. 然而, 因为一元运算符 -- 和 * 的优先级相同, 从右向左结合, 所以 第 6 行中的代码实际减少的是指针自己的值, 而不是他所指向的整数的值. 如果幸运的话, 程序会立即失败; 但是更有可能发生的是, 当程序执行过程后很久才产生出一个不正确的结果时, 我们只有一头雾水. 这里的原则是, 当你对优先级和结合性有疑问的时候, 就应该使用括号. 比如, 第 6 行, 我们可以使用表达式, 清晰的表明我们的意图.


7. 误解指针运算(Misunderstanding Pointer Arithmetic)

另一种常见的错误是忘了指针的算术操作是以他们指向的对象的大小为单位来进行的, 而这种大小单位并不一定是字节. 例如, 下面函数的目的是扫描一个 int 数组, 并返回一个指针, 指向 val 的首次出现:
int *search(int *p, int val)
{
    while (*p && *p != val)
        p += sizeof(int); /* Should be p++ */
    return p;
}
然而, 因为每次循环时, 第 4 行都把指针加了 4(一个 int 的字节数), 函数就不正确的扫描数组中每 4 个整数.


8. 引用不存在的变量(Referencing Nonexistent Variables)

没有太多经验的 C 程序员不理解栈的规则, 有时会引用不再合法的本地变量, 如下列所示:
int *stackref(void)
{
    int  val;

    return &val;
}
这个函数返回一个指针(如 p), 指向栈里的一个局部变量, 然后弹出它的栈帧. 尽管 p 仍然指向一个合法的存储器地址, 但是它已经不再指向一个合法的变量了. 当以后在程序中调用其他函数时, 存储器将重用他们的栈帧. 再后来, 如果程序分配某个值给 *p, 那么它可能实际上正在修改另一个函数的栈帧中的一个条目, 从而潜在的带来灾难性的后果. 要是没有发现就悲剧了.


9. 引用空闲堆块中的数据(Referencing Data in Free Heap Blocks)


一个相似的错误就是引用已经被释放了的堆块中的数据. 例如, 考虑下面的例子, 这个实例在第 6 行分配了一个整数数组 x, 在第 10 行中先释放了块 x, 然后在第 14 行中又引用了它:
int *heapref(int n, int m)
{
    int j;
    int *x, *y;

    x = (int *)malloc(n * sizeof(int));

    /* ... */          /* Other calls to malloc and free go here */

    free(x);

    y = (int *)malloc(m * sizeof(int));
    for (j = 0; j < m; j++)
        y[j] = x[j]++; /* Oops! x[j] is a word in a free block */

    return y;
}
取决于在第 6 行和第 10 行发生的 malloc 和 free 的调用模式, 当程序在第 14 行引用 x[j] 时, 数组 x 可能是某个其他已分配堆块的一部分了, 因此其内容被重写了. 和其他许多与存储器有关的错误一样, 这个错误只会在程序执行的后面, 当我们注意到 y 中的值被破坏了时才会显现出来.


10. 引起存储器泄露(Introducing Memory Leaks)

存储器泄露是缓慢, 隐性的杀手(slow, silent killers), 当程序员不小心忘记释放已分配块, 而在堆里创建了垃圾时, 会发生这种问题. 例如, 下面的函数分配了一个堆块 x, 然后不释放他就返回:
void leak(int n)
{
    int *x = (int *)malloc(n * sizeof(int));

    return; /* x is garbage at this point */
}
如果经常调用 leak, 那么渐渐地, 堆里就会充满了垃圾, 在最糟糕的情况下, 只会占用整个虚拟地址空间. 对于像守护进行和服务器这样的程序来说, 存储器泄露是特别严重的, 根据定义, 这些程序是不会终止的.

==========================================================================================================================
参考书籍: 深入理解计算机系统. Bryant & O`Hallaron.
要想看语法着色的, 可以戳这里: http://blog.csdn.net/kissmonx/article/details/8037968
戳下面可以下载, 英文版的, 强烈建议大家买本实体书, 看起来绝对过瘾, 不后悔.



==========================================================================================================================

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-10-3 16:45:54 | 显示全部楼层
字体最后变斜体了. 我嘞个去......不弄了. 反正也不耽误看.

出0入0汤圆

 楼主| 发表于 2012-10-3 16:50:13 | 显示全部楼层
看帖不回帖? 你说坑爹不坑爹?

出0入0汤圆

 楼主| 发表于 2012-10-3 16:51:30 | 显示全部楼层
今天心情好, 上传些好东西吧.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-10-3 16:58:45 | 显示全部楼层
这些个东西是 GNU-LD (连接器与加载器)相关的资料.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-10-3 17:23:25 | 显示全部楼层
下面的这些是GNU工具链的汇集. 不过多数都是英文的.  额.....英文很烂. 四级没过. 泪......
顺便把 vim 和 GNU C 库的一些资料也挂上吧.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-10-3 17:27:24 | 显示全部楼层
这个是我学 C 语言时整理的 CSDN 的博客文章<数组与指针的艺术>
博客地址: http://blog.csdn.net/supermegaboy
飞天御剑流, 哈哈.....很牛的一个人!佩服啊!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-10-3 17:29:50 | 显示全部楼层
这个是另一个博主的博客摘录, 博客地址: http://blog.csdn.net/masefee

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-10-3 17:32:47 | 显示全部楼层
这个是一些网摘.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-10-3 17:33:21 | 显示全部楼层
这个也是博客摘录的, 具体就不找了. 对不起原作者了!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-10-3 17:36:39 | 显示全部楼层
这两篇是我今年 51节没事干翻译的. 英文很烂, 翻译这个纯属闲着没事找事干, 有空再修改到博客里它们吧. 大家凑活着看.
有什么疑问可以发帖交流啊. 期待大家的指点. 我基本有网就上阿莫的.
或者发我邮箱(阿莫可以留邮箱么??????不行版主就删了): omonkerman@gmail.com

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-10-3 17:38:10 | 显示全部楼层
顺路,来基本内核驱动的。
还有很多Python,GTK的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-10-3 17:40:02 | 显示全部楼层
这个是网上找的, 好像是个培训的资料:
嵌入式系统高级C语言编程

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-10-3 17:43:29 来自手机 | 显示全部楼层
好东西啊

出0入0汤圆

 楼主| 发表于 2012-10-3 17:56:35 | 显示全部楼层
笑笑我笑了 发表于 2012-10-3 17:38
顺路,来基本内核驱动的。
还有很多Python,GTK的。

继续来好东西. 我以后就是打算搞驱动啊! 就是比较难, 没人带. 哈哈......努力啊!

出0入0汤圆

 楼主| 发表于 2012-10-3 18:08:10 | 显示全部楼层
再传点经典的 C 语言的书籍和嵌入式 C 的资料

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-10-3 18:09:17 | 显示全部楼层
好吧. 本来还想传点, 得去吃饭了, 回来估计就木有心情了!
哈哈.....别光下, 要看. 不然就悲剧了!

出0入0汤圆

发表于 2012-10-3 18:12:02 来自手机 | 显示全部楼层
不错不错~
与楼主共勉~
^O^

出0入21汤圆

发表于 2012-10-3 18:25:34 | 显示全部楼层
我也心情好
头像被屏蔽

出0入0汤圆

发表于 2012-10-3 18:26:33 | 显示全部楼层
楼主,好东西,强力支持

出0入0汤圆

发表于 2012-10-3 18:59:18 | 显示全部楼层
强烈支持楼主

出0入0汤圆

发表于 2012-10-3 19:21:04 | 显示全部楼层
学习 存储器常见错误

出0入0汤圆

发表于 2012-10-3 19:36:55 来自手机 | 显示全部楼层
谢谢楼主分享

出0入0汤圆

发表于 2012-10-3 19:39:08 | 显示全部楼层
这么多好资料。MARK 学习

出0入0汤圆

发表于 2012-10-3 19:40:55 | 显示全部楼层
这么多资料,学习了,谢谢楼主分享。

出90入0汤圆

发表于 2012-10-3 20:03:21 | 显示全部楼层
樓主大好人,分享了這麼多好資料!
PS:斜體雖然不耽誤看,但看起來比較累~

出0入0汤圆

发表于 2012-10-3 20:41:00 | 显示全部楼层
楼主,好东西

出0入0汤圆

发表于 2012-10-3 20:42:31 | 显示全部楼层
资料太丰富了,谢谢楼主!

出0入0汤圆

 楼主| 发表于 2012-10-3 21:04:12 | 显示全部楼层
xuyapple 发表于 2012-10-3 20:03
樓主大好人,分享了這麼多好資料!
PS:斜體雖然不耽誤看,但看起來比較累~ ...

刚刚好好琢磨了一下阿莫的编辑器, 原来是 [] 里的 i 惹的祸. 哈哈.....已经更改了.

出0入0汤圆

发表于 2012-10-3 21:09:51 | 显示全部楼层
这么多好东西,让我喜出望外呀~~~

出90入0汤圆

发表于 2012-10-3 21:11:22 | 显示全部楼层
monkerman 发表于 2012-10-3 21:04
刚刚好好琢磨了一下阿莫的编辑器, 原来是 [] 里的 i 惹的祸. 哈哈.....已经更改了.   ...

現在看起來舒服多了,樓主辛苦了~

出0入0汤圆

 楼主| 发表于 2012-10-3 21:19:14 | 显示全部楼层
这里还有一些我从 ARM 官网下的一些手册之类的东东.
都是很不错的参考手册. 非常有用. 至少我用到了.  哈哈......

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2012-12-11 09:08:04 | 显示全部楼层
好东西无人问津?

出0入0汤圆

发表于 2012-12-11 09:23:48 | 显示全部楼层
后面的资料不错,1楼的字体我这里还是显示的灰色,和其他 几楼的不一样。看着有点不方便。
请问这些资料你都研究的很熟了吧

出0入0汤圆

发表于 2012-12-11 09:54:31 | 显示全部楼层
楼主收集了这么多好书啊,不过这要什么时候才看得完,多谢了啊,一起学习共勉!

出0入0汤圆

发表于 2012-12-11 10:51:53 | 显示全部楼层
我以后就是打算学习驱动啊,虽然是做IC的!

出0入0汤圆

 楼主| 发表于 2012-12-11 10:54:48 | 显示全部楼层
maimaige 发表于 2012-12-11 09:23
后面的资料不错,1楼的字体我这里还是显示的灰色,和其他 几楼的不一样。看着有点不方便。
请问这些资料你 ...

内容已经改不了了. 木有办法.
这些资料只是看了个大概, C语言还可以, 其他的嘛, 熟练的程度是没有达到.

出0入0汤圆

 楼主| 发表于 2012-12-11 10:56:35 | 显示全部楼层
lechoate 发表于 2012-12-11 09:54
楼主收集了这么多好书啊,不过这要什么时候才看得完,多谢了啊,一起学习共勉! ...

慢慢看! 哈哈.....共勉!

出0入0汤圆

发表于 2012-12-11 11:09:07 | 显示全部楼层
资料很丰富,已经眼花缭乱了

出0入4汤圆

发表于 2012-12-11 11:11:47 | 显示全部楼层
对GNU LD感了个兴趣。

出0入0汤圆

发表于 2012-12-11 11:19:43 | 显示全部楼层
我顶,好多啊

出0入0汤圆

发表于 2012-12-11 17:32:12 | 显示全部楼层
好多资料我手头也有,不过没lz这么多,挺好的,顶.....

出0入0汤圆

 楼主| 发表于 2012-12-21 13:47:59 | 显示全部楼层
哇咔咔......加了个裤子, 小激动. 震惊了.
充满动力! 继续努力!

出70入0汤圆

发表于 2012-12-21 14:06:22 | 显示全部楼层
本帖最后由 绿茶山人 于 2012-12-21 14:08 编辑

这么多好东西,必须顶!

出0入0汤圆

发表于 2013-3-7 15:08:37 | 显示全部楼层
c资料,收藏

出0入0汤圆

发表于 2013-3-7 16:07:38 | 显示全部楼层
感谢楼主

出0入0汤圆

发表于 2013-3-8 12:22:16 | 显示全部楼层
这么多好资料。果断MARK, 学习楼主那句”别光下,要看“很中肯啊

出0入0汤圆

发表于 2013-3-8 12:34:17 | 显示全部楼层
谢谢楼主提供的这么丰富的资料

出0入0汤圆

发表于 2013-3-8 12:37:01 | 显示全部楼层
得么多好东西要慢慢消化,谢谢分享

出10入0汤圆

发表于 2013-3-8 12:54:13 来自手机 | 显示全部楼层
谢谢分享!

出0入0汤圆

发表于 2013-3-8 12:54:27 | 显示全部楼层
回帖支持一下!

出0入0汤圆

发表于 2013-3-8 13:36:47 | 显示全部楼层
资料好多啊,顶一个

出0入0汤圆

发表于 2013-3-8 23:46:27 | 显示全部楼层
精品C语言资料。学习了!!!!!!!

出0入0汤圆

发表于 2013-3-10 07:12:50 来自手机 | 显示全部楼层
谢谢,学习一下

出0入0汤圆

发表于 2013-3-10 13:59:13 | 显示全部楼层
好东西,必须顶。。。。。。。。。。。。。

出0入0汤圆

发表于 2013-3-10 14:10:03 | 显示全部楼层
LZ C的资料很丰富啊。

出0入0汤圆

发表于 2013-3-10 14:23:12 | 显示全部楼层
还有下载的  支持支持

出0入0汤圆

发表于 2013-3-10 15:17:04 | 显示全部楼层
好多的资料,这个必须要回复一下。

出0入0汤圆

发表于 2013-3-10 15:29:43 | 显示全部楼层
资料真是个丰富

出0入0汤圆

发表于 2013-3-10 15:39:10 | 显示全部楼层
185724132 发表于 2013-3-10 15:17
好多的资料,这个必须要回复一下。

+1,还必须要感谢一下LZ。

出0入0汤圆

 楼主| 发表于 2013-3-11 08:51:42 | 显示全部楼层
avrwoo 发表于 2013-3-10 14:10
LZ C的资料很丰富啊。

我还有一些. 如果需要可以留言, 我抽空上传!!

出0入0汤圆

发表于 2013-3-11 09:44:21 | 显示全部楼层
好贴!!!

出0入0汤圆

发表于 2013-3-11 09:47:31 | 显示全部楼层
Mark,慢慢学习!

出0入0汤圆

发表于 2013-3-11 11:50:42 | 显示全部楼层
请问楼主是怎么看英文资料的?

出0入0汤圆

发表于 2013-3-11 12:18:11 | 显示全部楼层
楼主威武!楼主好人啊!

出0入0汤圆

 楼主| 发表于 2013-3-11 13:48:43 | 显示全部楼层
电子设计爱好者 发表于 2013-3-11 11:50
请问楼主是怎么看英文资料的?


硬着头皮看的. 用灵格斯, 一边看, 不懂的就划词翻译...........

如果有中文版的, 读起来别扭或者怀疑, 就可以查看英文对照. 看多了, 就好点了.

唉.....英文不好很苦逼.

出0入0汤圆

发表于 2013-3-13 12:38:50 | 显示全部楼层
monkerman 发表于 2013-3-11 13:48
硬着头皮看的. 用灵格斯, 一边看, 不懂的就划词翻译...........

如果有中文版的, 读起来别扭或者怀疑,  ...

不错,值得学习

出0入0汤圆

发表于 2013-5-4 18:53:04 | 显示全部楼层
好多的好东西!谢谢分享!

出0入0汤圆

发表于 2013-5-8 20:19:38 | 显示全部楼层
太有用的资料了,以前为什么没有看到!

出0入0汤圆

发表于 2013-5-8 20:53:40 | 显示全部楼层
收藏了!

出0入0汤圆

发表于 2013-5-8 23:34:33 | 显示全部楼层
谢谢分享,很好的学习资料

出0入0汤圆

发表于 2013-5-9 09:08:00 | 显示全部楼层
mark,thanks.

出0入0汤圆

发表于 2013-5-9 10:39:49 | 显示全部楼层
LZ如果全看过,真是神人啊!

出0入0汤圆

 楼主| 发表于 2013-5-9 11:37:41 | 显示全部楼层
guowanling8061 发表于 2013-5-9 10:39
LZ如果全看过,真是神人啊!

手册类的东西, 只是当手册, 用到了查查.
其他的多数都看过, 都只一遍而已. 不知道忘了多少, 记住多少. 反正就是觉得自己懂的太少.

出0入0汤圆

发表于 2013-5-9 13:12:38 | 显示全部楼层
monkerman 发表于 2013-5-9 11:37
手册类的东西, 只是当手册, 用到了查查.
其他的多数都看过, 都只一遍而已. 不知道忘了多少, 记住多少. 反 ...

那也够厉害的了!谢谢好资料共享!

出0入0汤圆

发表于 2013-5-10 09:49:54 | 显示全部楼层
如何入门嵌入式linux、

出0入0汤圆

发表于 2013-5-10 12:02:28 | 显示全部楼层
哇靠1!!好东西啊!

出0入0汤圆

发表于 2013-5-11 10:30:10 | 显示全部楼层

出0入0汤圆

发表于 2013-10-23 23:02:36 | 显示全部楼层
记号,收藏,C的内容

出0入0汤圆

发表于 2013-10-23 23:11:04 | 显示全部楼层
顶啊!!!!

出0入0汤圆

发表于 2014-3-7 10:42:53 | 显示全部楼层
好厉害的东西,仔细学习!

出0入0汤圆

发表于 2014-3-7 11:07:02 | 显示全部楼层
来看一下呗

出0入0汤圆

发表于 2014-3-7 13:17:29 | 显示全部楼层
这么多资料,要看到什么时候啊

出0入0汤圆

发表于 2014-3-7 13:29:08 | 显示全部楼层
mark。。。

出0入0汤圆

发表于 2014-3-7 13:39:52 | 显示全部楼层
MARK一下 以后看

出0入0汤圆

发表于 2014-3-7 13:52:01 | 显示全部楼层
LZ,感谢分享

出0入0汤圆

发表于 2014-3-7 13:53:56 | 显示全部楼层
LZ,感谢分享

出0入0汤圆

发表于 2014-3-7 15:14:16 | 显示全部楼层
C语言资料 mark

出40入42汤圆

发表于 2014-3-7 15:48:01 | 显示全部楼层
mark一下咯

出0入0汤圆

发表于 2014-3-7 21:50:08 | 显示全部楼层
谢谢共享……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 05:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表