4
#include <stdio.h>
#include "stdlib.h"

int main(int argc, const char * argv[])
{
    int i,j;
    char takimlar[4][8]= { "TAKIM A ","TAKIM B","TAKIM C","TAKIM D"};
    char *var = malloc(sizeof(char)*1);
    int sonuclar[4][4] = {
        {0,3,4,2},
        {1,2,3,1},
        {2,3,2,3},
        {0,2,1,4}
    };

    for (i=0; i<4; i++) {
        if (sonuclar[i][2]>sonuclar[i][3]) {
            var = realloc(var,8);
            for (j=0; j<8; j++) {
                var += takimlar[i][0];
            }
        }
        else if(sonuclar[i][2]<sonuclar[i][3]){
            var = realloc(var,8);
            for (j=0; j<8; j++) {
                var += takimlar[i][1];
            }
        }
    }
    printf("%s",var);

    return 0;
}

変数のメモリを動的に割り当てたいのですが、realloc 関数を使用してより多くのメモリを割り当てたいと考えています。このプログラムを実行すると、次のエラーが発生しました。

オブジェクト 0x100100c17 のエラー: 再割り当てされたポインターが割り当てられませんでした。デバッグするために malloc_error_break にブレークポイントを設定します

malloc.cファイルを調べたところ、次の行が表示されました。

zone = find_registered_zone(old_ptr, &old_size);
    if (!zone) {
        malloc_printf("error for object %p: pointer being realloc'd was not allocated.\n"
        "set a breakpoint in malloc_error_break to debug\n", old_ptr);
        malloc_error_break();

私は何を間違っていますか?

4

2 に答える 2

3

この行はポインタをインクリメントしていますvar:

var += takimlar[i][0];

ループの後続の繰り返しで、varが渡されたときにまたはrealloc()によって返される値ではありません。コードが aに aを追加しようとしているかのように見えますが、これはこれを達成する方法ではありません。realloc()malloc()charchar*

于 2012-11-06T16:19:18.797 に答える
0
var += takimlar[i][0];

varは であるchar*ため、アドレスに文字を追加しています。それがあなたのやりたいことかどうかわかりません。次に、 を呼び出すreallocと、ポインターは によって返されたアドレスと等しくmallocなくなります。したがって、実行時エラーが発生します。

于 2012-11-06T16:18:25.210 に答える