c - 添加不相关的代码会更改同一打印的输出

标签 c memory

我有一个在嵌入式系统上运行的 C 程序。这是在开始时声明的:

__attribute__((section(".graph"))) __attribute__((aligned(4))) 
char bm_char[((FRAME_WIDTH * FRAME_HEIGHT /16) * 2) + 120];

main() 中,bm_char 使用字符串 "1" 进行初始化:

for (i = 0; i < (((FRAME_WIDTH * FRAME_HEIGHT /16) * 2) + 120); i++)
{
    bm_char[i] = "1";
}

最后:

FILE *file = fopen("Bitmap.txt", "w");
int results = fputs(bm_char, file);

我运行了代码,Bitmap.txt如下所示:

ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

我在代码中添加了一个新的、不相关的行,输出变为:

°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°

然后还有一行:

²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²

还有一个:

’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’

为什么会发生这种情况?是内存问题吗?

最佳答案

bm_char[i] 是一个 char,但您为其分配了一个指针 - 这不是有效的 C。添加更多代码只是移动该字符串常量(改变它的指针,从而改变你最终存储在数组中的值)。你真正想要的是:

bm_char[i] = '1';

在将 bm_char 传递给 fputs 之前,您还应该以 null 终止。

旁白:您应该从原始代码中获得编译器诊断 - 请注意并修复这些警告的原因!

关于c - 添加不相关的代码会更改同一打印的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53347458/

相关文章:

C++ 堆栈内存仍然有效吗?

c++ - 在堆栈上分配大缓冲区

jquery - Chrome JS 内存崩溃

c - 通过字符总和进行字谜测试

c - 如何在c中打开几个jpg图像?

c - 错误: indirection requires pointer operand ('int' invalid)

c - 为什么在 Ubuntu 上的 C 中,堆栈上的参数和局部变量有 12 个字节?

c - 信号处理代码的 Glib 哈希表问题

Java ArrayList内存使用递归

java - 在 Java 程序 GapContent$MarkData 中建立内存