我有这段代码:
FILE *stream;
char *buf_test = calloc(1024, sizeof(char));
size_t index = 0;
stream = fopen("test.txt", "r");
while (fgets(&buf_test[index], 1024, stream) != NULL)
index = strlen(buf_test);
(buf_test[index-1] == '\n') ? buf_test[index-1] = 0 : 0;
printf("test.txt: %s\n", buf_test);
fclose(stream);
free(buf_test);
当我运行valgrind检查它是否正确管理内存时,我得到:
总堆使用量:2个allocs,2个frees,1,592个字节分配 所有堆块都被释放 - 没有泄漏可能
但是当我改变这个时:
stream = fopen("test.txt", "r");
while (fgets(&buf_test[index], 1024, stream) != NULL)
index = strlen(buf_test);
到此:
while (fgets(&buf_test[index], 1024, (stream = fopen("test.txt", "r"))) != NULL)
index = strlen(buf_test);
我遇到分段错误,valgrind检测到分配了580,952个字节,但仍然可以访问..
这里发生了什么?
答案 0 :(得分:3)
发生的事情是: