我有一个任务,找到这个代码错误的原因.
#include <stdlib.h>
#include <stdio.h>
#define fail(a) ((test == 0 || test == a) ? fail##a() : 0)
#define N (10)
int a[N] = { 1 };
int* b = &a[0];
void fail1()
{
printf("a[0] = %d\n", a[0]);
printf("b[0] = %d\n", b[0]);
printf("*b = %d\n", *b);
*b = 2;
a[N] = 3;
printf("*b = %d\n", *b);
}
...
int main(int argc, char **argv)
{
int test = 0;
if (argc > 1) {
sscanf(argv[1], "%d", &test);
printf("doing test %d\n", test);
} else
puts("doing all tests");
fail(1);
fail(2);
fail(3);
fail(4);
fail(5);
fail(6);
puts("lab6 reached the end");
exit(0);
}
Run Code Online (Sandbox Code Playgroud)
通过使用valgrind它告诉我有一个失败printf("*b = %d\n", *b);.我注意到通过评论a[N] = 3;valvgrind没有错误.但我不明白为什么.我知道这与内存有关,我知道a[N]要求数组之外的元素.
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |