我的代码有问题:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct hashTable{
char *data;
struct hashTable *next;
}HASHTABLE;
HASHTABLE **linkedHashTable[100];
void SaveHashTable1(char *str2,char *str3) //s retazenim---Linked List
{
int hashResult;
HASHTABLE* linkedHashTableNode=NULL, *new_;
hashResult=StringToInt(str2);
if(linkedHashTable[hashResult]==NULL)
{
linkedHashTableNode=(HASHTABLE*)malloc(sizeof(HASHTABLE));
linkedHashTableNode->data=(char*)malloc(strlen(str3)*sizeof(char));
strcpy(linkedHashTableNode->data,str3);
linkedHashTableNode->next=NULL;
linkedHashTable[hashResult]=&linkedHashTableNode;
}
else
{
linkedHashTableNode=*linkedHashTable[hashResult];
while(linkedHashTableNode->next!=NULL)
linkedHashTableNode=linkedHashTableNode->next;
new_=(HASHTABLE*)malloc(sizeof(HASHTABLE));
new_->data=(char*)malloc(strlen(str3)*sizeof(char));
strcpy(new_->data,str3);
new_->next=NULL;
linkedHashTableNode->next=new_;
}
}
int main(void)
{
char *str1=NULL, *str2=NULL, *str3=NULL;
int i;
while(1)
{
scanf("%s ", str1);
if((strcmp(str1, "save"))==0) //SAVE
{
scanf("%s %[^\n]s", str2, str3);
SaveHashTable1(str2, str3);
}
}
}
这是代码的一部分,当我尝试执行此操作时,我遇到了问题:
linkedHashTableNode->data=(char*)malloc(strlen(str3)*sizeof(char));
strcpy(linkedHashTableNode->data,str3);
我总是在scanf()的内存区域附近获得内存空间,所以当我再次从控制台读取数据时,原始数据会被重写。我不知道哪里有问题。
谢谢你的帮助。