Articles of pointers de

Por que desreferenciando um ponteiro nulo é um comportamento indefinido?

De acordo com o ISO C ++, desreferenciando um ponteiro nulo é um comportamento indefinido. Minha curiosidade é por quê? Por padrão decidiu declarar comportamento indefinido? Qual é a razão por trás dessa decisão? Dependência do compilador? Não parece, porque de acordo com o padrão C99, tanto quanto eu sei, é bem definido. Dependência de […]

Como saber se um ponteiro aponta para o heap ou a pilha?

Exemplo: bool isHeapPtr(void* ptr) { //… } int iStack = 35; int *ptrStack = &iStack; bool isHeapPointer1 = isHeapPtr(ptrStack); // Should be false bool isHeapPointer2 = isHeapPtr(new int(5)); // Should be true /* I know… it is a memory leak */ Por que eu quero saber disso: Se eu tiver em uma class um ponteiro […]

Ponteiro de function C lançando para anular o ponteiro

Eu estou tentando executar o seguinte programa, mas recebendo alguns erros estranhos: Arquivo 1.c: typedef unsigned long (*FN_GET_VAL)(void); FN_GET_VAL gfnPtr; void setCallback(const void *fnPointer) { gfnPtr = *((FN_GET_VAL*) (&fnPointer)); } Arquivo 2.c: extern FN_GET_VAL gfnPtr; unsigned long myfunc(void) { return 0; } main() { setCallback((void*)myfunc); gfnPtr(); /* Crashing as value was not properly assigned in […]

Qual é o construtor padrão para o ponteiro C ++?

Eu tenho código assim: class MapIndex { private: typedef std::map Container; Container mapM; public: void add(std::list& values) { if (values.empty()) // sanity check return; std::string s(*(values.begin())); values.erase(values.begin()); if (values.empty()) return; MapIndex *mi = mapM[s]; // add(values); } } A principal preocupação que tenho é se a expressão mapM [s] retornaria uma referência a um ponteiro […]

Falha de segmentação ao gravar em uma string

Eu estou tentando escrever uma function inversa no local e ter seguido o código on-line praticamente exatamente, ainda executando o seguinte programa lança um erro de barramento. Estou passando o tipo errado de argumento para inverter ()? void reverse(char *str) { char * end = str; char tmp; if (str) { while (*end) { ++end; […]

Como alias um nome de function em Fortran

Não tenho certeza se o título está bem colocado. Sugestões bem-vindas. Aqui está o que eu quero fazer. Verifique uma condição e, em seguida, decida qual function usar em um loop. Por exemplo: if (a < 0) then loop_func = func1 else loop_func = func2 endif Eu posso então usar loop_func como um ponteiro ao […]

Convertendo matrizes multidimensionais em pointers em c ++

Eu tenho um programa que se parece com o seguinte: double[4][4] startMatrix; double[4][4] inverseMatrix; initialize(startMatrix) //this puts the information I want in startMatrix Agora quero calcular o inverso de startMatrix e colocá-lo em inversseMatrix. Eu tenho uma function de biblioteca para esse propósito cujo protótipo é o seguinte: void MatrixInversion(double** A, int order, double** B) […]

diferença entre um ponteiro e um parâmetro de referência?

São os mesmos: int foo(bar* p) { return p->someInt(); } e int foo(bar& r) { return r.someInt(); } Ignore o potencial do ponteiro nulo. Estas duas funções são funcionalmente idênticas, não importa se someInt() é virtual ou se elas são passadas uma bar ou uma subclass de bar ? Isso faz alguma coisa: bar& ref […]

Qual é o tamanho de um ponteiro?

O tamanho de um ponteiro é igual ao tamanho do tipo para o qual ele está apontando ou os pointers sempre têm um tamanho fixo? Por exemplo… int x = 10; int * xPtr = &x; char y = ‘a’; char * yPtr = &y; std::cout << sizeof(x) << "\n"; std::cout << sizeof(xPtr) << "\n"; […]

O que acontece em uma dupla exclusão?

Obj *op = new Obj; Obj *op2 = op; delete op; delete op2; // What happens here? Qual é o pior que pode acontecer quando você acidentalmente duplica a exclusão? Isso importa? O compilador vai lançar um erro?