2

以下はいくつかの擬似ですが、私はこれを達成しようとしています。問題は書かれているとおりで、空白のポインターを返します。

int testFunction(char *t) {
    int size = 100;
    t = malloc(100 + 1);
    t = <do a bunch of stuff to assign a value>;
    return size;
}

int runIt() {
    char *str = 0;
    int str_size = 0;
    str_size = testFunction(str);
    <at this point, str is blank and unmodified, what's wrong?>
    free(str);
    return 0;
}

これは、 char str[100] = ""などの事前定義されたサイズがあり、後でメモリの割り当てや解放を試みない場合にうまく機能します。ただし、サイズを動的にできる必要があります。

私もこれを試しましたが、どういうわけか破損したポインターに遭遇したようです。

int testFunction(char **t) {
    int size = 100;
    t = malloc(100 + 1);
    t = <do a bunch of stuff to assign a value>;
    return size;
}

int runIt() {
    char *str = 0;
    int str_size = 0;
    str_size = testFunction(&str);
    <at this point, str is blank and unmodified, what's wrong?>
    free(str);
    return 0;
}

ありがとう!

4

3 に答える 3

7

あなたのテスト機能は少し後ろ向きです。サイズは入力でなければなりません。割り当てられたポインタは出力でなければなりません:

char* testFunction(int size) {
    char* p = malloc(size);
    <do a bunch of stuff to assign a value>;
    return p;
}

int runIt() {
    char *str = 0;
    int str_size = 100;
    str = testFunction(str_size);
    <do something>
    free(str);
    return 0;
}

編集

コメントごとに、サイズも出力にします。

char* testFunction(int *size) {
    *size = <compute size>;
    char* p = malloc(size);
    <do a bunch of stuff to assign a value>;
    return p;
}

int runIt() {
    char *str = 0;
    int str_size;
    str = testFunction(&str_size);
    <do something>
    free(str);
    return 0;
}
于 2012-10-09T00:57:54.183 に答える
4

2 番目の例ではほぼ完了していますが、変更します

int testFunction(char **t) {
  ...
  t = malloc(100 + 1);

int testFunction(char **t) {
  ...
  *t = malloc(100 + 1);

ポイントは、ポインターへのポインターである を渡しているchar**ため、それが指すもの (ポインター) に malloc を割り当てたいということです。

于 2012-10-09T00:58:46.943 に答える