Tag: 堆内存

新指针(通过malloc)与其中一个释放/旧指针相同

我试图跟踪C中的使用后免费错误。我的问题是,如果我有这样的代码: A * ptrA = malloc(sizeof(A)); A * aliasA = ptrA; // do something ‘ free(ptrA) // some other code B * ptrB = malloc(sizeof(B)); // assume this return same pointer as ptrA //trying to use aliasA here 只是想知道aliasA的使用是否是UAF错误? 如果是的话,这里出了什么问题? 要清除这个问题,我认为最好添加一个小例子: int main(){ int *ptr = (int *)malloc(4); *ptr = 5; int *ptr2 = ptr; […]

C中的堆错误

我知道这是非常通用的,但是当我在Visual C ++ 2008 Express中运行我的.c文件时,我得到了“this”(见下文)。 当我调用malloc ()时会发生这种情况。 我的工作 – 我正确地动态分配内存。 HEAP [Code.exe]:HEAP:免费堆块211a10在211af8被修复后被释放Windows已触发Code.exe中的断点。 这可能是由于堆的损坏,这表示Code.exe或它已加载的任何DLL中的错误。 这也可能是由于用户在Code.exe具有焦点时按下F12。 输出窗口可能包含更多诊断信息。 为什么我会收到此错误? 这甚至意味着什么?

堆和堆栈存储器如何管理,实现,分配

可能重复: 如何堆叠,实现和分配堆栈和堆栈内存? C ++中的堆栈,静态和堆 在C / C ++中,我们可以在堆栈或堆上存储变量,函数,成员函数,类的实例。 每个如何实施? 如何管理(高级别)? gcc是否预先分配了一块用于堆栈和堆的内存,然后根据请求发送出去? 原始内存来自RAM吗? 可以在堆而不是堆栈上分配函数吗? –Clarification– 我真的在询问堆和堆栈存储器的实现和管理。 阅读引用的问题后,我没有找到任何解决这个问题的方法……感谢链接

C:如何释放链表中的节点?

如何释放在另一个函数中分配的节点? struct node { int data; struct node* next; }; struct node* buildList() { struct node* head = NULL; struct node* second = NULL; struct node* third = NULL; head = malloc(sizeof(struct node)); second = malloc(sizeof(struct node)); third = malloc(sizeof(struct node)); head->data = 1; head->next = second; second->data = 2; second->next = third; third->data = […]

对堆上结构使用struct初始化语法

我有这个简单的结构,我想在堆上初始化并作为函数中的指针返回。 struct entry { const char* const key; // We don’t want the key modified in any way const void* data; // But the pointer to data can change struct entry* next; }; 有一个问题,我不能calloc它并逐个初始化成员因为key是一个const指针。 我找到了一个有效的语法: struct entry* entry = calloc(1, sizeof(struct entry)); *entry = (struct entry) { .key = key, .data = data, .next = […]

堆栈和堆中的内存分配

这似乎是一个非常基本的问题,但它一直在我脑海中: 当我们分配一个局部变量时,它会进入堆栈。 类似地,动态分配会导致变量进入堆。 现在,我的问题是,这个变量实际上是在堆栈还是堆上,或者我们只是堆栈和堆中的引用。 例如, 假设我声明了一个变量int i 。 现在这个i被分配在堆栈上。 那么,当我打印i的地址时,这将是堆栈中的一个位置? 堆的问题也一样。

使用malloc(sizeof())从* void到* int 的无效转换

我正在编写一个计算两个数字的最大公分母的程序,但是我遇到了malloc函数和指针的问题。 实际上很清楚堆栈和堆段如何在内存中工作以及原因。 但是,在程序中,在声明指针并且使用mallocfunction与否时,我还无法理解。 这是代码: #include #include #include int *calcolaDivisori(int); int main(int argc, char** argv) { int foundCounter = 0; int i,j,s1,s2; int n1,n2; int mcd = 1,mcm; int *pn1,*pn2; int d1[100],d2[100]; // INPUT dei due interi printf(“Inserisci il primo numero :”); scanf(” %d”, &n1); printf(“\nInserisci il secondo numero :”); scanf(” %d”, &n2); // calcolo divisori […]