Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Valgrind:无效读取和Segfault之间的差异_C_Memory Leaks_Valgrind - Fatal编程技术网

C Valgrind:无效读取和Segfault之间的差异

C Valgrind:无效读取和Segfault之间的差异,c,memory-leaks,valgrind,C,Memory Leaks,Valgrind,所以我开始了解valgrind,我遇到了一个让我困惑的例子 我发现此代码导致valgrind中的写入无效: #include <stdlib.h> #include <stdlib.h> int main(int argc, const char* argv[]) { int index = atoi(argv[1]); char *x = malloc(10); x[index] = ‘f’; return 0; } i

所以我开始了解valgrind,我遇到了一个让我困惑的例子

我发现此代码导致valgrind中的写入无效:

#include <stdlib.h>

 #include <stdlib.h>

int main(int argc, const char* argv[])
{

    int index = atoi(argv[1]);

    char *x = malloc(10);

    x[index] = ‘f’;

    return 0;

}
int foo(y)
{

    char str[10];

    str[11] = ‘f’;

    return 0

}
那么,这些示例是否与示例1是在堆上完成的,而第二个示例是在堆栈上完成的这一事实有关

我错过了更大的东西吗


谢谢

嗯,这都是未定义的行为,所以谁知道呢?第一个很大程度上取决于作为命令行参数传递的内容。但是,是的,第一个代码块可能会损坏堆,而第二个代码块可能会破坏堆栈。第二个代码块甚至不应该编译,你不能在C中使用卷曲引号。@Barmar:事实上,两个代码块都有卷曲引号。但这是有道理的。