C 奇怪的代码行为?
我有一个C代码,其中有一个结构声明,其中声明了int[576]数组 出于某种原因,我不得不从结构中删除这个数组,所以我用一个指针int*ptr替换了这个数组;在代码中的其他地方声明了一些相同类型的全局数组,并通过将全局数组分配给该指针来初始化该指针。因此,我不必从代码的其他部分更改访问此数组的方式 但是,当我在结构中声明数组时,它工作正常/提供所需的输出,但当我在结构中声明它为指针并将全局数组分配给该指针时,作为指针初始化的一部分,它提供垃圾输出 所有这些代码都在MS-VC 6.0/Windows setup/Intel-x86上运行 我试过以下方法:C 奇怪的代码行为?,c,arrays,data-structures,pointers,C,Arrays,Data Structures,Pointers,我有一个C代码,其中有一个结构声明,其中声明了int[576]数组 出于某种原因,我不得不从结构中删除这个数组,所以我用一个指针int*ptr替换了这个数组;在代码中的其他地方声明了一些相同类型的全局数组,并通过将全局数组分配给该指针来初始化该指针。因此,我不必从代码的其他部分更改访问此数组的方式 但是,当我在结构中声明数组时,它工作正常/提供所需的输出,但当我在结构中声明它为指针并将全局数组分配给该指针时,作为指针初始化的一部分,它提供垃圾输出 所有这些代码都在MS-VC 6.0/Window
我怎样才能集中精力解决这个问题?任何指针都会有帮助。尝试(清理和)重建项目时,可能现有的对象文件仍在访问数组元素,就好像它没有在堆上分配一样,这会导致问题。是否可能在结构字段的任何位置使用sizeof<代码>sizeof(int[576])!=sizeof(int*)
这应该是两者之间唯一可见的区别。您说您不必更改访问此阵列的方式。但有些操作对数组和指针的结果不同。一个是前面提到的sizeof(struct.arr)与sizeof(struct.ptr),另一个是&struct.arr与&struct.ptr。您是否检查了对该阵列的任何单一访问,并将这些差异考虑在内?根据您对该阵列所做的操作以及您对它的期望,新代码的功能可能与旧代码的功能完全相同,也可能完全不同。如果你没有看到你在做什么,就无法说出发生了什么。这是什么垃圾输出?您是否尝试过将数组初始化为相同的保护值(与零不同?)尽管我使用sizeof(结构)为该结构分配内存,但出于调试目的,我还尝试过将数组保持在结构中,然后在该结构中声明另一个指针,然后使该指针指向该数组。所以基本上是为了确保sizeof没有出错。结果还是一样,输出不好。@EFraim:谢谢。我的代码中有一些错误。请尝试创建一个最小的示例来演示这个问题。当你拥有它的时候,你可能会知道你做错了什么。如果不是,那就把它加到问题上。