我正在尝试将单词从 a 复制file .txt
到链接列表中。我写了一些东西,但发生的事情是程序立即关闭,好像有内存分配错误。我不明白我哪里错了。
#include <stdio.h>
#include <stdlib.h>
struct s_nodo
{
char* palabra;
struct s_nodo*sig;
};
typedef struct s_nodo* t_nodo;
void agregar (t_nodo*,char*);
void imprimir(t_nodo);
int main()
{
char aux[30];
t_nodo lista=NULL;
FILE*fd;
fd=fopen("c:\\texto.txt","r");
while(!feof(fd))
{
fscanf(fd,"%s",aux);
agregar(&lista,aux);
}
imprimir(lista);
return 0;
}
void agregar (t_nodo*lista,char *aux)
{
if(*lista==NULL)
{
*lista=malloc(sizeof(t_nodo));
(*lista)->palabra=malloc((strlen(aux+1))*sizeof(char));
strcpy((*lista)->palabra,aux);
(*lista)->sig=NULL;
}
else agregar(&(*lista)->sig,aux);
}
void imprimir (t_nodo lista)
{
if(lista!=NULL)
{
printf("-%s-",lista->palabra);
imprimir(lista->sig);
}
}
正如您所说,内存分配存在错误,特别是在
malloc
函数内的第二个错误agregar
:问题是
strlen
你在哪里做strlen(aux+1)
,你应该做什么strlen(aux)+1
。自从我在 C 中使用指针已经很长时间了,所以我可能是错的,但如果我没记错的话:当你这样做时,aux+1
你实际上是在尝试从 访问下一个内存位置aux
,然后结果strlen(aux+1)
不是你所期望的,创建运行时内存问题。通过将该行更正为:
该程序运行没有问题。
错误在该行中:
您的方法添加:
要分配内存,您只需要 :
malloc( )
,没有必要*sizeof(char)