C &引用;test.exe遇到断点“0”;
我正在编写一个UNIXC &引用;test.exe遇到断点“0”;,c,visual-studio-2015,C,Visual Studio 2015,我正在编写一个UNIX粘贴克隆。然而,我不断收到“遇到断点”消息,但VS不会告诉我发生在哪一行 #include <stdio.h> #include <stdlib.h> #define INITALLOC 16 #define STEP 8 int main(int argc, char *argv[]) { if (horzmerge(argc - 1, argv + 1) == 0) { perror("horzme
粘贴克隆。然而,我不断收到“遇到断点”消息,但VS不会告诉我发生在哪一行
#include <stdio.h>
#include <stdlib.h>
#define INITALLOC 16
#define STEP 8
int main(int argc, char *argv[])
{
if (horzmerge(argc - 1, argv + 1) == 0) {
perror("horzmerge");
return EXIT_FAILURE;
}
getchar();
return EXIT_SUCCESS;
}
int horzmerge(int nfiles, const char **filenames)
{
FILE **files;
char *line;
int i;
if ((files = malloc(nfiles * sizeof (FILE *))) == NULL)
return 0;
for (i = 0; i < nfiles; ++i)
if ((files[i] = fopen(filenames[i], "r")) == NULL)
return 0;
do {
for (i = 0; i < nfiles; ++i) {
if (getline(files[i], &line) == 0)
return 0;
fprintf(stdout, "%s", line);
free(line);
}
putchar('\n');
} while (!feof(files[0])); /* we can still get another line */
for (i = 0; i < nfiles; ++i)
fclose(files[i]);
free(files);
return 1;
}
int getline(FILE *fp, char **dynline)
{
size_t nalloced = INITALLOC;
int c, i;
if ((*dynline = calloc(INITALLOC, sizeof(char))) == NULL)
return 0;
for (i = 0; (c = getc(fp)) != EOF && c != '\n'; ++i) {
if (i == nalloced)
if ((*dynline = realloc(*dynline, nalloced += STEP)) == NULL)
return 0;
(*dynline)[i] = c;
}
(*dynline)[i] = '\0';
if (c == EOF)
return EOF;
return i;
}
#包括
#包括
#定义INITALLOC 16
#定义步骤8
int main(int argc,char*argv[])
{
如果(霍兹麦格(argc-1,argv+1)==0){
佩罗(horzmerge);
返回退出失败;
}
getchar();
返回退出成功;
}
int horzmerge(int文件、常量字符**文件名)
{
档案**档案;
字符*行;
int i;
if((files=malloc(nfiles*sizeof(FILE*)))==NULL)
返回0;
对于(i=0;i
我放置了断点,看到它是horzmerge
中的free(line)
语句。但有时程序运行良好。有时候不是。有时我在getline
中得到一个“堆损坏”。我已经在这段代码上工作了一个星期,仍然找不到bug。在我看来,输入字符串的null终止行可能会溢出缓冲区,你calloc
ed或realloc
ed。当你释放该缓冲区时,这可能会损坏你的堆
分配内存时,不要忘记为字符串末尾的空字符留出空间
以Null结尾的字符串类似于disco。四十年后,它们仍然很烂 尝试使用类似于?无功能原型?当(!feof(files[0])
@WeatherVane使用feof
调用时,我可以判断是否需要阅读更多行。您是否阅读了feof()
的手册页?无论如何,这只是数组中的第一个文件。