25得票2回答
std::variant是否允许为其成员分配内存?

我在想,std::variant 的实现是否必须是“平坦的”,或者它是否允许为其成员动态分配内存,使得一系列变体会退化为指针序列,从而破坏缓存局部性。

22得票1回答
为什么在C11中没有对齐的calloc函数

C11标准添加了aligned_alloc函数,用于分配未初始化的对齐内存。标准还包括calloc函数,用于分配已初始化为零但仅将其对齐到最大类型大小的内存。 为什么C11标准没有包含一个aligned_calloc函数,该函数分配对齐的零初始化内存? 我知道您可以使用memset对结果进...

22得票4回答
指针数组的动态内存分配

我正在尝试编写一个程序,从文本文件中读取一系列字符串,并将它们存储在一个动态分配内存的字符串数组中。我的计划是使用指针将每个字符串存储在数组中,然后随着读入更多字符串来增加数组的大小。但我不明白为什么下面的测试代码无法正常工作。这个想法可行吗?char *aPtr; aPtr =(char*)...

21得票1回答
动态内存访问只能在函数内部工作

这个问题旨在作为常见问题的规范副本使用: 我正在函数内动态分配数据,一切都运行正常,但只限于分配发生的函数内部。当我尝试在函数外部使用相同的数据时,程序会崩溃或出现其他意外的程序行为。 这里有一个MCVE:。 #include <stdlib.h> #include <...

21得票3回答
双指针与指针数组(数组 vs *数组[])

我不太确定这两者之间有什么区别。我的教授写道“array与*array[]相同”,并且我们被演示了一个使用**array的例子(所以在课后,我尝试将其与*array[]交换,但它没有起作用),请问这两个是否真的如他所写?无论如何,这节课是关于动态内存分配的。 一旦我改变了双指针,这行代码就开...

21得票6回答
堆栈中的动态数组?

这个正确吗? 使用g++(3.4)编译成功。 int main() { int x = 12; char pz[x]; }

21得票4回答
调用指针两次会导致免费错误

我在讲座中学习到,对指针调用free()两次非常不好。我知道释放完指针后,将其设置为NULL是一个好习惯。 然而,我从未听说过任何解释为什么这样做。据我所知,malloc()的工作方式应该在技术上跟踪它已分配并提供给您使用的指针。那么为什么它不知道通过free()接收到的指针是否已释放? ...

21得票1回答
如何正确释放与getline()函数相关的内存?

我刚开始学习编程,有一个初学者的问题,我想写一个函数逐行读取长度未知的文件。由于我不知道每行的长度,因此我使用了getline()函数:void readDict(FILE *dict_file){ //Read dic char *line; size_t len = 0, r...

20得票10回答
C++中,“pointer = new type”和“pointer = new type []”有何不同?

在许多教程中,关于动态内存的第一个代码示例通常是以下内容:int * pointer; pointer = new int; // version 1 //OR pointer = new int [20]; // version 2 他们总是解释第二个版本的工作原理,但完...

20得票8回答
使用std::vector会带来什么额外的开销?

我知道通常情况下手动动态内存分配不是一个好主意,但是在某些情况下,它是否比使用例如std::vector更好的解决方案呢? 举个简单的例子,如果我需要存储一个n整数数组,其中n int* data = new int[n]; //assuming n is set beforehand 或者...