- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个功能:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct adress Adress;
struct adress {char *num; char *street; char *namestreet; char *city; char *postal;};
int main(void) {
int n = 0;
int i;
struct adress *Adress;
FILE *f = fopen("/home/file.txt","r");
if (!f) {
printf("Impossible to open file\n");
return 1;
}
char line[256];
while (fgets(line,256,f)) {
if (n == 0) {
Adress = malloc(sizeof(struct adress)*(n+1));
}
Adress[n].num = malloc( 256*sizeof( char));
Adress[n].street = malloc( 256*sizeof( char));
Adress[n].namestreet = malloc( 256*sizeof( char));
Adress[n].city = malloc( 256*sizeof( char));
Adress[n].postal = malloc( 256*sizeof( char));
fscanf( f , "%s %s %s %s %s", Adress[n].num, Adress[n].street, Adress[n].namestreet, Adress[n].city ,Adress[n].postal);
n++;
}
for (i = 0; i < n; i++)
{
printf("\nNum : %s \n", Adress[i].num);
printf("\nStreet : %s \n", Adress[i].street);
printf("\nStreet Name :%s \n", Adress[i].namestreet);
printf("\nCity :%s \n", Adress[i].city);
printf("\nPostal Code : %s \n", Adress[i].postal);
}
fclose(f);
return 0;
}
当我尝试编译程序时,出现以下错误:
* glibc detected * ./myprog: corrupted double-linked list: 0x0000000001cd6240
我做错了什么?
以前有人遇到过这种类型的错误吗?
最佳答案
您只为一个struct adress
分配足够的空间,如果您读取超过一行,您将写入超出Adress
指向的数组末尾并损坏堆。随后对 malloc
的调用会检测到这一点并中止,并显示以下消息:./myprog:损坏的双链表:0x0000000001cd6240
。
将地址
初始化为NULL
:
struct adress *Adress = NULL;
并更改这三行:
if (n == 0) {
Adress = malloc(sizeof(struct adress)*(n+1));
}
至
Adress = realloc(Adress, sizeof(struct adress)*(n+1));
if (!Adress) {
printf("out of memory\n");
exit(1);
}
关于编译器提示 '' *** glibc 检测到 *** ./myprog : corrupted double-linked list: 0x0000000001cd6240 *** '' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34052950/
我有一个简单的批处理脚本 test.bat,它通过命令行参数进行迭代: @echo off set prefix=C:\Program Files\MyProg for %%x in (%*) do
我希望我的程序能够 self 更新(从 ftp 下载新的 exe 和/或其他一些文件)并且我使用了 this question 的已接受答案中的配方.回顾: 将正在运行的程序重命名为old-mp.ex
我有这个功能: #include #include #include typedef struct adress Adress; struct adress {char *num; char *
我想编写一个运行外部“java myprog output.txt”命令的 Java 程序。最终目标是在两个不同的程序上运行此命令,并从各自的输出文件中比较它们的输出相似性。 我想我已经阅读了几乎所
我注意到 node.js 有一个调试器“自动附加”功能,如果可能的话我想使用它。但是,我不认为我可以在重新编译我的程序后使用“自动附加”来自动启动调试器。我使用 C/C++/Fortran 使用 ma
我注意到 node.js 有一个调试器“自动附加”功能,如果可能的话我想使用它。但是,我不认为我可以在重新编译我的程序后使用“自动附加”来自动启动调试器。我使用 C/C++/Fortran 使用 ma
我是一名优秀的程序员,十分优秀!