运行以下程序时出现分段错误。
#include<stdio.h>
int main()
{
char *a[10] = {"hi", "hello", "how"};
int i ;
printf("%s %s %s %s %s\n",a[0],a[1],a[2],a[3],a[4]);
for (i = 0;i < 10; i++)
printf("%s\n",a[i]);
return 0;
}
输出
hi hello how (null) (null)
hi
hello
how
Segmentation fault (core dumped)
我有gcc版本4.8.2(Ubuntu 4.8.2-19ubuntu1)和Linux内核3.16.0-34-generic。
我知道所有非初始化的数组条目都得到值0,所以我希望printf上有一个null
。
但它给出了分段错误。
奇怪的是,当我用p printf (“%s\n”,a[i])
替换rintf(“%s %d\n”,a[i],i)
时,我可以获得null
未填充的数组条目。
事实上,%s
和\n
之间的空格也没有分段错误。
有谁能告诉我这种行为背后的原因。
答案 0 :(得分:3)
取决于您的编译器,您的第二个NULL
将替换为var implicitUnwrappedOptionalInt: Int! = nil
var optionalInt: Int? = nil
查看assembly result
并且nil
的系统实现似乎会以 SharePhoto photo = new SharePhoto.Builder()
.setBitmap(shareBitmap)
.setCaption("Description")
.build();
作为参数崩溃。