c - C 代码中的指针问题

标签 c arrays pointers

语言: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 block :

    larr = array;
    putc('5', stdout);
    sarr = result;
    putc('5', stdout);
    bint = &lasta;
    putc('5', stdout);
    sint = &lastr;
    putc('5', stdout);

不存在“段错误”。更多

指针有什么问题?

附:系统:FreeBSD 9.1,编译器:gcc 4.6,gcc 4.9,clang

发现问题:我的笨蛋。 在 main() 末尾使用指针 bint/sint 的操作不正确(我使用 *bint-- 而不是 *bint -= 1)。 putc(..) 没有打印任何内容,因为没有调用 fflush(stdout)。

最佳答案

array[lasta] 和 array[lastr] 是 char 类型,你用 %d 打印它们 - 这可能会扰乱内存,因为大小不匹配。由于这是 UB,您可能会收到任何错误,我想在这种情况下只有在尝试打印其他内容时才会传播

关于c - C 代码中的指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19078744/

相关文章:

c - 抓取windows文件信息

java - JLabel 数组与 Graphics2D 绘画

c - 如何使用指向结构的指针进行迭代?

c - strcmp 不比较

C 倒回来自命令输出的 FILE 指针

c - 打印二进制数给出奇怪的结果

Javascript 数组意外地被 NaN 填充

arrays - 如何快速计算数组中的特定项目

c - VALGRIND 无效读取大小为 8、链表、释放节点

c++ - 无法将指针位置设置为 C++ 中另一个指针位置的位置