私のコードに問題があります:
#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()のメモリ領域の近くにメモリ空間を確保しているので、再度コンソールからデータを読み込むと元のデータが書き換えられてしまいます。そして、どこに問題があるのか わかりません。
ご協力いただきありがとうございます。