语言:C
全局变量
char array[1001]={0};
char result[1001]={0};
//main()
//lasta - index of last element in array[], lastr - index for result[]
//larr - pointer to larger array (array[] or result[])
//bint - pointer to bigger of lasta or lastr, sint - smaller
int i = 0, lasta = 0, lastr = 0, overflow = 0;
char *larr, *sarr;
int *bint, *sint;
scanf("%s", array); //init arrays - ok
scanf("%s", result);
//some routines, include output of arrays, whitch don't modify global arrays
//...
// next 3 lines is just debug output. No troubles, all correct
printf("\narray: %s\n", array);
printf("\nresult: %s\n", result);
printf("\nlasta = %d, lastr = %d, arr[lasta]=%d, res[lastr]=%d\n", lasta, lastr, array[lasta], array[lastr]);
if (lasta > lastr)
{
larr = array;
sarr = result;
bint = &lasta;
sint = &lastr;
}
else
{
larr = result;
sarr = array;
bint = &lastr;
sint = &lasta;
}
putc('5', stdout); // no ouput: Segmentation fault (core dumped)
如果我以这种方式修改if-else块:
larr = array;
putc('5', stdout);
sarr = result;
putc('5', stdout);
bint = &lasta;
putc('5', stdout);
sint = &lastr;
putc('5', stdout);
没有“分段错误”。更
指针有什么问题?
P.S。系统:FreeBSD 9.1,编译器:gcc 4.6,gcc 4.9,clang
麻烦发现:我的傻瓜。 在main()的末尾使用指针bint / sint(我使用* bint--而不是* bint - = 1)的错误工作。 putc(..)没有打印任何东西,因为没有fflush(stdout)的调用。
答案 0 :(得分:0)
array [lasta]和array [lastr]是char类型,你用%d打印它们 - 因为大小不匹配,所以可能会弄乱内存。由于这是UB,您可能会收到任何错误,我想在这种情况下只有在尝试打印其他内容时才会传播