gpt4 book ai didi

C - 为什么返回 int 会导致段错误?

转载 作者:行者123 更新时间:2023-11-30 16:55:56 26 4
gpt4 key购买 nike

我正在开发一个小型私有(private)项目,该项目从 html 页面源读取一些链接。我逐行读取 html 文件,然后检查该行是否包含“data-cfsrc”,它始终位于我要读取的链接之前。这工作正常,直到我尝试释放指向关键字(“data-cfsrc”)开始位置的指针。

我已尝试在多个点上释放它,并且仅当我尚未对其执行任何操作时它才有效。

这是我的代码:

            FILE *fp_w, *fp_r;
fp_r = fopen("page.html","r");
fp_w = fopen("bg_list.txt","a");
char line[1024],img[512],c;
//char *imgpoint = malloc(sizeof(char)*512);
char *imgpoint;
int i,imgcount = 0;

while(imgcount<15){
// read line
i = 0;
do{
c = fgetc(fp_r);
line[i] = c;
i++;
}while(c!='\n');
line[i] = '\0';

if(strstr(line,"data-cfsrc") != NULL){
imgpoint = strstr(line,"data-cfsrc");
strcpy(img,imgpoint);
c = 0;
for(i=0; c!=34; i++){
img[i] = img[i+12];
c = img[i+13];
}
img[i] = '\0';
fprintf(fp_w,"%s\n",img);
imgcount++;
printf("imgcount = %d\n",imgcount);
}
}
fclose(fp_r);
fclose(fp_w);
//free(imgpoint);

return 0;

编辑:如上所述,我完全删除了 free(),但现在我的程序在调用 return 时仍然会导致段错误。

编辑2:完全省略了impoint指针。一切仍然有效,但返回时我仍然遇到段错误。

最佳答案

free()要求您传递由 malloc() (或 friend )返回的相同指针。但在这里,

imgpoint = strstr(line,"data-cfsrc");

您正在重新分配它。因此,当调用 free() 时,未定义的行为

来自free() :

The free() function frees the memory space pointed to by ptr, which must have been returned by a previous call to malloc(), calloc(), or realloc(). Otherwise, or if free(ptr) has already been called before, undefined behavior occurs. If ptr is NULL, no operation is performed.

(强调)。

关于C - 为什么返回 int 会导致段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40127113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com