-8
int main() {
    //  int arr[2][2] = { {1,2}, {3,4}};
    int a[] = {1,2};
    int b[] = {3,4};
    int (*ptr)[2];

    // assign ptr to arr
    //ptr = arr;
    ptr = (int (*)[2])malloc (2*sizeof(int));
    ptr = &a;
    (ptr+1) = b;  // error here
     printf("%3d %3d", ptr[0][1], ptr[1][1]) ;
 }

(ptr+1) assgin one array が必要です。助けてください。ありがとう。

4

4 に答える 4

2

ptrは int array( int[2]) へのポインタですが、間違ったサイズを malloc し、同じ変数に代入してメモリ リークを起こし、mallocメモリ アドレスをオーバーライドします。私はあなたがそれをしたいと思います:

int (**ptr)[2];
ptr = malloc (2*sizeof(int(*)[2]));
ptr[0] = &a;
ptr[1] = &b;
于 2012-05-08T03:29:19.513 に答える
0

完全なコード:

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

int main() {
    int a[] = {1,2};
    int b[] = {3,4};
    int **ptr;

    ptr = (int **) malloc(sizeof(int *) * 2);

    ptr[0] = a;
    ptr[1] = b;
    printf("%3d %3d\n", ptr[0][1], ptr[1][1]);
    free(ptr);
 }

a と b は既に (整数への) ポインターであるため、ptr はポインター (**) へのポインターです。

于 2012-05-08T03:38:17.440 に答える
0

配列へのポインターではなく、ポインターの配列を使用する必要があります。

int main()
{
    int a[] = {1,2};
    int b[] = {3,4};
    int *ptr[2] = { a, b };

    printf("%3d %3d", ptr[0][1], ptr[1][1]) ;

    return 0;
}
于 2012-05-08T03:38:38.073 に答える
0

このようにmallocできます。

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

int main(int argc, char *argv[]) {
    int i;
    int a[] = {1,2};
    int b[] = {3,4};
    int *ptr[2];    //same as ptr[2][??]

    ptr[0] = (int *) malloc(sizeof(int*) * 2);  //malloc ptr[0] >> 2 * sizeof int
    ptr[1] = (int *) malloc(sizeof(int*) * 5);  //malloc ptr[1] >> 5 * sizeof int

    /* so we get ptr[0][2] and ptr[1][5]*/

    /* SET VALUE */
    for(i = 0; i < 2; i++)
    ptr[0][i] = i;
    for(i = 0; i < 5; i++)
    ptr[1][i] = i;


    /* PRINT VALUE */
    for(i = 0; i < 2; i++)
        printf("ptr[0][%03d] = %03d\n", i, ptr[0][i]);

    printf("\n");

    for(i = 0; i < 5; i++)
        printf("ptr[1][%03d] = %03d\n", i, ptr[1][i]);


    /* FREE POINTER */
    free(ptr[0]);
    free(ptr[1]);

    return 0;
}
于 2012-05-08T04:23:43.620 に答える