私はCの文字列の配列をmalloc
しています。フリー・オブジェクト・エラー
Assembler(87536) malloc: *** error for object 0x108500840: pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug
それはなぜです:それを解放した後、私は次のエラーを取得しますか?私はかなりmalloc
を正しくやっていると確信しています。私はメモリ管理にかなり経験がありますが、なぜこれが私にエラーを与えているのか分かりません。配列にはそれぞれ3文字の文字列を格納する必要があります。文字列の長さはそれぞれ2文字です。ここで
は、私は、配列をmallocingい方法です。ここで
char **reg_store;
reg_store = malloc(3 * (sizeof(char*)));
if (reg_store == NULL) {
fprintf(Out, "Out of memory\n");
exit(1);
}
for (int i = 0; i < 3; i++) {
reg_store[i] = malloc(2 * sizeof(char));
if (reg_store[i] == NULL) {
fprintf(Out, "Out of memory\n");
exit(1);
}
}
は、私はそれを解放しています方法です。ここで
for (int i = 0; i < 3; i++) {
free(reg_store[i]);
}
free(reg_store);
は、私が間に持っているものです。
// Keeps a reference to which register has been parsed for storage
int count = 0;
char *reg = NULL;
char *inst_ptr // POINTS TO SOME STRING. EXAMPLE: $t2, $t1, $a0
while (1) {
// Parses the string in inst_ptr with dollar, comma and space as a delimiter.
reg = parse_token(inst_ptr, " $,\n", &inst_ptr, NULL);
if (reg == NULL || *reg == '#') {
break;
}
reg_store[count] = reg;
count++;
free(reg);
}
私はparse_token
に電話した後、reg
を印刷していますが、正しく印刷されます。私もreg_store[count]
を印刷しており、それも正しく印刷されます。
このコードでは、最も高いメモリデバッグオプションが設定された状態でメモリエラーが発生しません。物事を含めて全体のコードを投稿してください。 – Dani
真ん中にコードを追加しました。これをチェックしてください。ありがとう – darksky
あなたは最初にsizeof(char *)を行いますが、それぞれを実行するとsizeof(char)が呼び出されます。 charはプロジェクトのポインタですか?私が正しいとすれば、最初の呼び出しでは、あなたのシステムのcharのサイズの代わりに、charのポインタのサイズを取得しています(cで再生してからしばらくしています)。 –