【发布时间】:2016-09-14 14:29:48
【问题描述】:
#include<stdio.h>
#include<stdlib.h>
struct keyVal
{
int key;
int val;
};
int main()
{
struct keyVal *arr[5];
int i;
for(i=0;i<5;i++)
printf("\n : %p %p ",&arr[i][0].val,&arr[i]);
printf("\n\n");
printf("\n : %d %d ",arr[0][0].val,arr[0]->val);
printf("\n\n");
for(i=0;i<5;i++)
printf("\n : %d %d ",arr[i][0].val,arr[i]->val);
printf("\n\n");
return 0;
}
首先,for( ; ; ); 会从arr[0][0] 到arr[4][0] 和arr[0] 到arr[4] 生成相同的%p %p,这意味着arr[i][0] == arr[i] 其中i = 0,1,2,3,4。
第二个for( ; ; ); 应该打印arr[i][0].key (arr[i]->key) 的值(垃圾值)。
我们可以通过以下方式访问密钥:
arr[i][0].key 或 arr[i]->key 其中i = 0,1,2,3,4。
【问题讨论】:
-
编译器警告是什么?
-
arr没有初始化,所以整个代码是UB。 -
你能重新格式化你的问题吗?如图所示,代码非常不清楚。
-
@SouravGhosh 运行时错误是:分段错误(核心转储)
-
提示:将
newline放在格式字符串的结尾,而不是开头。然后,当您崩溃时,不会缓冲未打印的消息,从而使您对程序到达的位置感到困惑。如果在另一个语句中要打印更多内容,例如循环中的数组值,则应该只省略最后的换行符。然后,循环后printf("\n");
标签: c struct segmentation-fault