打印
[STM32F1]

stm32f100数组赋值问题

[复制链接]
510|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
probedog|  楼主 | 2024-7-25 15:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
uint8_t buf[10];
buf[0] = 33;
buf[1] = 34;
结果是
buf[0]  33
buf[1]  34
buf[2]  34
有没有人碰到过这种情况,帮我看下是哪里不对

使用特权

评论回复
沙发
ClarkLLOTP| | 2024-7-25 19:51 | 只看该作者
有啥问题啊?

使用特权

评论回复
板凳
Bowclad| | 2024-7-26 11:26 | 只看该作者
是不是循环多了一次啊

使用特权

评论回复
地板
未说出口的像你| | 2024-8-22 12:06 | 只看该作者
你赋值没啥问题啊,可以清掉buf2这个数组就好了

使用特权

评论回复
5
在曼谷的春| | 2024-8-22 15:00 | 只看该作者
在你的代码中,buf[2] 被赋值为 34 的情况并不存在,因为你的代码只给 buf[0] 和 buf[1] 赋了值。如果你在实际运行时发现 buf[2] 的值为 34,那么这可能是内存越界写入了

使用特权

评论回复
6
一只眠羊| | 2024-8-22 17:00 | 只看该作者
在其他部分的代码中,可能存在对 buf 数组的越界写入操作,导致 buf[2] 被意外地赋值为 34。这种情况下,你需要检查整个程序中所有对 buf 数组的操作,确保没有越界写入。

使用特权

评论回复
7
月亮一键变蓝| | 2024-8-22 19:00 | 只看该作者
未初始化的内存:如果 buf 数组在声明时没有被初始化,那么 buf[2] 的值可能是随机的,这取决于它在内存中的位置以及之前存储在该位置的数据。在这种情况下,确保在声明数组时进行初始化,或者在使用数组之前将其清零。

使用特权

评论回复
8
失物招領| | 2024-8-22 21:00 | 只看该作者
编译器优化:某些编译器优化可能会导致意外的行为,尤其是在没有正确使用编译器指示符的情况下。确保你的编译器设置和优化级别没有导致这种问题。

使用特权

评论回复
9
我吃小朋友| | 2024-8-22 23:00 | 只看该作者
硬件故障:在极少数情况下,硬件故障(如内存损坏)也可能导致这种意外的行为。

使用特权

评论回复
10
将爱藏于深海| | 2024-8-23 02:00 | 只看该作者
检查整个程序中所有对 buf 数组的操作,确保没有越界写入。

使用特权

评论回复
11
春日负喧| | 2024-8-23 04:00 | 只看该作者
在使用 buf 数组之前,对其进行初始化,例如使用 memset 函数将其清零。

使用特权

评论回复
12
她已醉| | 2024-8-23 12:00 | 只看该作者
使用调试工具(如断点、内存检查工具)来检查 buf 数组的内存状态。

使用特权

评论回复
13
温室雏菊| | 2024-8-23 14:00 | 只看该作者
如果可能,尝试在不同的编译器或不同的硬件上运行程序,看看问题是否依然存在。

使用特权

评论回复
14
铁血丹心LLLL| | 2024-8-28 01:05 | 只看该作者
如果你意外地写入了buf的其他位置,可能会影响到你看到的内容。

使用特权

评论回复
15
铁血丹心LLLL| | 2024-8-28 01:05 | 只看该作者
有时候,编译器优化可能会影响代码的行为。

使用特权

评论回复
16
铁血丹心LLLL| | 2024-8-28 01:06 | 只看该作者
也可能是其他代码部分导致的问题。 试试这个代码。
看看有没有问题,如果没问题就是其他代码部分导致的问题。
#include <stdio.h>
#include <stdint.h>

int main() {
    uint8_t buf[10];
    buf[0] = 33;
    buf[1] = 34;
    // Print values
    printf("buf[0] = %d\n", buf[0]);
    printf("buf[1] = %d\n", buf[1]);
    printf("buf[2] = %d\n", buf[2]);
    return 0;
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

385

主题

2085

帖子

3

粉丝