- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 C 语言新手,完全被这个问题迷惑了。这是一项家庭作业,旨在用 C 语言实现类似 pagerank 算法的功能。
我试图通过二维指针数组记录来自其他页面的链接。我的程序工作得很好,并且很高兴地计算大量链接的页面排名,但是,每当我尝试释放我的链接数组时,我都会收到“无效的免费”错误。
示例代码:
struct webpage {
char name[20];
int links_out;
struct webpage **links_in; //to hold pointers to pages.
int index; //stores the position in the pre-sorted array
// as I have to print it out in this order
};
static struct webpage *pages = NULL;
这是我的数据结构。读入一些基本变量(例如页数(npages))后,我分配内存
pages = (struct webpage *)calloc(npages, sizeof(struct webpage));
当我在每个网页中阅读时,我分配内部二维数组 links_in 如下
pages[counter].links_in = (struct webpage **)calloc(npages, sizeof(struct webpage *));
然后里面的每个页面:
for(i =0; i< npages; ++i)
pages[counter].link_in[i] = (struct webpage *)calloc(1, sizeof(struct webpage));
我对网页数组进行排序。然后读取链接信息并使用 bsearch 对我的数组进行二分搜索,以获得指向每个所需页面的指针。
struct webpage *temp_in;
struct webpage *temp_out;
temp_in = bsearch(temp_str, pages, npages, sizeof(struct webpage), struct_cmp_by_name);
temp_out = bsearch(temp_str2, pages, npages, sizeof(struct webpage), struct_cmp_by_name);
然后我分配
temp_in->links_in[temp_out->index] = temp_out;
这一切都很好,我能够访问所有所需的数据来计算页面排名。完成后,我尝试按如下方式释放内存:
for(int i = 0; i < npages; ++i){
for(int k = 0; k < npages; ++k){
if(pages[i].links_in[k] != NULL){
free(pages[i].links_in[k]); //this line is causing the error
pages[i].links_in[k] = NULL;
}
}
free(pages[i].links_in);
}
第一次调用时,k 循环内对 free 的调用会抛出无效的 free(或双重释放损坏)错误。
我已经用 gdb 仔细检查了代码,一切似乎都指向正确的方向。 gdb 将该行列为程序中断点。
valgrind 的说法大致相同:
Invalid free() / delete / delete[]
at 0x4A05187: free (vg_replace_malloc.c:325)
by 0x4009C4: memory_dump (pagerank.c: 87) // this is the line free(pages[i].links_in[k];
by 0x4013F2: seq_check_condition (pagerank.c:355)
by 0x40162F: main (pagerank.c:418)
在此之前我绝不会删除/释放该(或任何内存)内存。
感谢您的任何建议。
最佳答案
我猜这就是问题所在:
temp_in->links_in[temp_out->index] = temp_out;
看来您已经为所有“links_in”指针分配了内存 - 然后您正在更改该指针以指向您已分配的另一位内存。
也许你想要这样的东西:
memcpy(temp_in->links_in[temp_out->index], temp_out, sizeof(struct webpage));
...或者进行一些重新设计?
关于c - 无效免费或腐败出局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6058800/
我有一个接受以下参数的函数: int setvalue(void (*)(void *)); 为了满足参数:void (*)(void *),我创建了这样一个函数: static void *
我有以下代码: typedef void VOID; int f(void); int g(VOID); 在 C 中编译得很好(在 Fedora 10 上使用 gcc 4.3.2)。与 C++ 编译的
这个问题已经有答案了: Is f(void) deprecated in modern C and C++? [duplicate] (6 个回答) 已关闭 7 年前。 B.A.T.M.A.N./A.
我在 ASP.NET Core 3.1 项目上有以下 Identity Server 4 配置: services .AddIdentityServer(y => { y.Events.R
我们有一个 O365 租户,一切都是开箱即用的。租户放置在德国云中,而不是全局 (office.de) 中。我们还开发了一个 Office 插件,使用 OAuth 2.0 授权访问共享点。首先,我们向
我有一个如下所示的路由 routes.MapRoute( name: "Default", url: "{controller}/{action}/{i
我正在尝试使用 OAuth2.0 访问 google 文档。我已经从 Google API 控制台获取了客户端 ID 和 key 。但是当我运行这段代码时,我收到了异常。如果我遗漏了什么,有人可以建议
此代码有效: let mut b: Vec = Vec::with_capacity(a.len()); for val in a.iter() { b.push(val); } 此代码不起作
使用 client_credintials 授权类型请求 EWS oauth2 v2.0 的访问 token 时出现错误。 https://login.microsoftonline.com/tena
我通过 Java 应用程序使用 Google 电子表格时遇到了问题。我创建了应用程序,该应用程序运行了 1 年多,没有任何问题,我什至在 Create Spreadsheet using Google
如何创建 匹配所有无效 Base64 字符的正则表达式?我在堆栈上找到了 [^a-zA-Z0-9+/=\n\r].*$ 但是当我尝试时我得到了带有 - 符号的结果字符串.我根本不知道正则表达式,任何人
我从 Gitlab CI/CD Pipelines 获得错误信息:yaml invalid。问题是由 .gitlab-ci.yml 脚本的第五行引起的: - 'ssh deployer@gita
我有 3 个数据源,设置如下: @Configuration @Component public class DataSourceConfig { @Bean("foo") @Conf
你好,我想用bulkCreate ex 插入数据: [ { "typeId": 5, "devEui": "0094E796CBFCFEF9", "application_name": "Pressu
UIApplicationExitsOnSuspend 不会强制我的应用程序退出。我已经清理过目标、删除了应用程序、重建并重新安装了很多次。 我确实需要退出我的应用程序。 最佳答案 您是否链接了 SD
在 iPhone 配置门户上,显示我的 iPhone 团队配置配置文件无效。有一个“由 Xcode 管理”文本。 “续订”按钮被禁用。 我该如何解决这个问题?谢谢 最佳答案 使用 Xcode 3.2.
好的,所以今天我用我们的“实时”数据库中的新信息更新了我的数据库……从那时起,我的一个表格就出现了问题。如果您需要任何代码,请告诉我,我将对其进行编辑并发布所需的代码... 我有一个报告表格,其中有一
我有一个结构体,其中有一个元素表示为 void (*func)(); 我知道 void 指针通常用于函数指针,但我似乎无法定义该函数。我不断收到取消引用指向不完整类型的指针。我用谷歌搜索了一下但没有结
我正在尝试使用 Coldfusion 9 从 ning 网络获取凭证,所以首先这是测试 api 的 curl 语法: curl -k https://external.ningapis.com/xn/
这个问题已经有答案了: Does C have references? (2 个回答) 已关闭 4 年前。 我正在学习 C 语言引用,这是我的代码: #include int main(void)
我是一名优秀的程序员,十分优秀!