Как установить значение переменной по индексу в оперативной памяти? - PullRequest
0 голосов
/ 07 марта 2012

Я получаю числовое значение указателя, например: 0xbfe0e6ac можно установить int foo, например, значение 0xbfe0e6ac, что является другим целым числом в памяти?

Мой сценарий:

Я пытался реализовать функции для получения следующего индекса из массива, передавая значение указателя (как в примере выше) в качестве параметра.

Например:

char * a = "baa";
char* b = "foo";

    printf("%c", cgetnext(&a)); // b
    printf("%c", cgetnext(&a)); // a
    printf("%c", cgetnext(&b)); // f
    printf("%c", cgetnext(&b)); // a

Единственный способ, которым я могу это сделать: в cgetnex() сохранить указатель массива, переданный как параметр в массив, и каждый вызов проверятьмассив, переданный как paramater, использовался ранее и получает информацию о нем, например, lasindexused и значение указателя в RAM.

Вот мой код:

#include <string.h>
#include <stdlib.h>

typedef struct  { int pLocation; int lastIndex; } POINTERINFORMATION;

int     __myIndex;
POINTERINFORMATION   pointersLocations[256];
int     pointersLocationsLength;
char *  temparr = NULL;


__myIndex = pointersLocationsLength = 0;

int 
    plAdd (int p)
    {
        if (plLen >= sizeof(pointersLocation)) {
            return -1;
        } else {
            pointersLocation[pointersLocationsLength].pLocation = p;
            pointersLocation[pointersLocationsLength].lastindex = 0;
            pointersLocationsLength ++;
            return pointersLocationsLength;
        }
    }

int 
    getPointer (int p, POINTERINFORMATION ** out)
    {
        int i;
        for (i = 0; i < pointersLocationsLength; i++)
        {
            if(pointersLocation[pointersLocationsLength].pLocation == p)
            {
                *out = makevariablefromponiter(pi.pLocation);
                return 1;
            }
        }

        return 0;
    }

char 
    cgetnext(char * arr) 
    {
        char * myarr; 
        const size_t size = sizeof(char *) + 1;

        myarr = malloc(size);

        if (NULL == arr){
            POINTERINFORMATION * pi;
            if (getPointer(p, &pi))
            {
                __myIndex = pi.lastindex;
                            myarr = makevariablefromponiter(pi.pLocation);
            }
        } else {
            myarr = strdup (arr);
        }

        if (strlen(myarr) == __myIndex) {
            return '\0';
        } else  {
            __myIndex ++;
            temparr = malloc(size);
            temparr = strdup(myarr);
            return myarr[__myIndex - 1];
        }
    }

1 Ответ

3 голосов
/ 07 марта 2012

Да, сделайте что-то вроде этого:

int *fooPtr = 0xbfe0e6ac;

foo = *fooPtr;

На самом деле, вы можете сделать его еще более кратким:

foo = *(int *) 0xbfe0e6ac;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...