используя указатель int в нескольких кутах

Я довольно новичок в мире указателей на C / C ++, так что это может быть довольно простой вопрос для вас:

Следующий C ++ — код работает нормально

#include <iostream>

int main()
{
int theInt = 1337;
int & theReference = theInt;
int * thePointer = &theInt;

std::cout << "int: " << theInt << "\n";
std::cout << "referenz: " << theReference << "\n";
std::cout << "pointer: " << *thePointer << "\n";
std::cout << "pointer: " << *thePointer << "\n";

//std::cout << "foo" << "\n";

return 0;
}

но перестает работать при смене

//std::cout << "foo" << "\n";

в

std::cout << "foo" << "\n";

.

Под «прекращением работы» я подразумеваю: «заблокирован моей системой безопасности norton как потенциальная угроза» (в результате получится код возврата «0x76F531AF», если это поможет). Так как norton обычно не мешает моему программированию, я предполагаю, что двойное использование указателя int в cout каким-то образом приводит к segfault …

Спасибо за вашу помощь!

PS:

Я использую Code :: Blocks в Windows 8.1 с компилятором GCC и отладчиком GDB из TDM-GCC (версия 4.7.1, 32-разрядная версия).

РЕДАКТИРОВАТЬ: удалено удаление указателя -> проблема остается.

0

Решение

Ты можешь только delete объекты, созданные в куче (используя new или C-стиль malloc и тому подобное).

// allocate on the heap
int *intOnTheHeap = new int;

// do some stuff with it
*intOnTheHeap = 0;
(*intOnTheHeap)++;
std::cout << *intOnTheHeap << std::endl;

// deallocate
delete intOnTheHeap;

Если вы возьмете указатель на локальную переменную, он будет указывать на запись в стеке. Вам не нужно и не следует освобождать эту память самостоятельно. Память «освобождается» путем автоматического изменения указателя стека, когда ваша переменная выходит из области видимости (в конце функции).

void myFunction() {
int localVariable;
int *pointerToLocalVariable = &localVariable;

// forbidden and unnecessary:
//delete pointerToLocalVariable;

// here (end of the block) the memory on the stack
// will be freed automatically
}
0

Другие решения

Так как я получил ту же ошибку после Norton-Interception в совершенно разных контекстах, похоже, это случай несовместимости Code :: Blocks Norton.

0

По вопросам рекламы [email protected]