【发布时间】:2010-03-31 08:10:36
【问题描述】:
我有一个 C 代码,其中我有一个结构声明,其中声明了一个 int[576] 数组。
由于某种原因,我不得不从结构中删除这个数组,所以我用一个指针替换了这个数组作为 int *ptr;在代码的其他地方声明了一些相同类型的全局数组,并通过将全局数组分配给这个指针来初始化这个指针。因此,我不必从代码的其他部分更改访问该数组的方式。
但是当我在结构中声明数组时它可以正常工作/提供所需的输出,但是当我将它声明为结构中的指针并将全局数组分配给该指针时,它会提供垃圾输出,作为指针初始化。
所有这些代码都在 MS-VC 6.0/Windows setup/Intel-x86 上运行。
我尝试了以下方法:
怀疑结构填充/对齐但无法获得任何线索?如果结构对齐可能是罪魁祸首,我该如何继续缩小范围并确认?
我已确保在这两种情况下,数组都被初始化为一些默认值,例如在第一次使用之前为 0,并且在初始化之前不使用它。
我尝试对这个新声明的数组使用全局数组以及基于 malloc 的内存。同样的结果,垃圾输出。
如何解决问题?任何指针都会有所帮助。
【问题讨论】:
-
根据您对该数组的操作以及您对它的期望,新代码的功能可能与旧代码几乎相同,或者可能完全不同。如果没有真正看到您正在尝试做什么,就无法说出发生了什么。
-
那是什么垃圾输出?您是否尝试将数组初始化为相同的保护值(不同于零?)
标签: c arrays data-structures pointers