単純なリンクリスト構造体を作成しようとしましたが、何らかの理由でLLのデータを解放することをテストしたときに、無効なポインターエラーが発生しました。誰かが理由を説明できますか?
#include <stdio.h>
#include <stdlib.h>
void add();
typedef struct node{
char* data;
struct node* next;
} node;
node** n;
int main(int argv, char** argc){
n = (node**)malloc(sizeof(node*)*10);
int i;
for(i = 0; i < 10; i++){
n[i] = NULL;
}
add();
free(n[0]->data);
return 0;
}
void add(){
char* temp = (char*)malloc(sizeof(char)*4);
temp = "Meh\0";
n[0] = (node*)malloc(sizeof(node));
n[0]->data = temp;
}
char* temp = (char*)malloc(sizeof(char)*4);
temp = "Meh\0";
への割り当てtemp
は原因ですfree
。これにより、静的な文字列「Meh \ 0」を指すように設定されます。これはあなたのものではありません。この場合、mallocは効果がありません。代わりに、静的データを指すようにすぐに置き換えます。によって割り当てられたメモリにデータをコピーする場合は、memcpyなどを使用しmalloc
ます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加