我正在寻找C++参考并找到动态内存管理并且正在查看重新分配内存的函数,我想知道这个函数是否可以用于使数组更大我认为这是他们的意思但我真的不明白这条线
more_numbers = (int*) realloc (numbers, count * sizeof(int));
Run Code Online (Sandbox Code Playgroud)
这出现在cplusplus参考的例子中,所以这里是我的问题
可以realloc()用来制作更大的数组吗?谢谢 :)
我对动态内存分配概念有一点困惑.如果我们声明一个指针说一个char指针,我们需要分配足够的内存空间.
char* str = (char*)malloc(20*sizeof(char));
str = "This is a string";
Run Code Online (Sandbox Code Playgroud)
但这也有效.
char* str = "This is a string";
Run Code Online (Sandbox Code Playgroud)
那么在这种情况下我们必须分配内存空间?
我在玩C++指针.我将内存分配给指针,但之后我没有释放它.下次运行程序时,指针位于同一地址 - 为什么?OS不应该看到该地址被占用因此产生内存泄漏吗?
int* a = new int[1]; //or (int*) malloc(1);
cout << &a << endl; //always 0x28fe98
Run Code Online (Sandbox Code Playgroud) 我写代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char * var=(char*) calloc(10, sizeof(char));
strncpy(var,"123456789",9);
strncpy(var, "abcdefghi",1000000 );
printf("This is var == %s\n",var);
}
Run Code Online (Sandbox Code Playgroud)
但在编译并运行他之后,我有Segmentation fault错误.如果我将行中的最大复制字符更改strncpy(var, "abcdefghi",1000000)为10,那么它可以正常工作.但我真的不明白为什么segmentation fault我的情况会发生错误.
我是MPI的新手.我写了一个简单的代码来显示使用多个进程的矩阵.如果我有一个8x8的矩阵并用4个进程启动MPI程序,那么我的第1个进程将打印第2个2行,第2个线程将由第2个线程打印,然后将它自己分开.
#define S 8
MPI_Status status;
int main(int argc, char *argv[])
{
int numtasks, taskid;
int i, j, k = 0;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &taskid);
MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
int rows, offset, remainPart, orginalRows, height, width;
int **a;
// int a[S][S];
if(taskid == 0)
{
cout<<taskid<<endl;
height = width = S;
a = (int **)malloc(height*sizeof(int *));
for(i=0; i<height; i++)
a[i] = (int *)malloc(width*sizeof(int));
for(i=0; i<S; i++)
for(j=0; j<S; j++)
a[i][j] = ++k;
rows = S/numtasks;
offset = rows;
remainPart = S%numtasks;
cout<<"Num …Run Code Online (Sandbox Code Playgroud) 我正在尝试开发一个应用程序,它从RAM中分配给定数量的GB.当我尝试分配1 GB RAM它工作正常,但超过1GB,它崩溃.
我使用的是Windows 7 - 64位,我有6 GB RAM(已安装的内存).我使用Qt开发此应用程序,我使用的是Visual Studio 2013.
代码在这里:
int size = 1024 * 1024 * 1024;
m_Size = ui.CPUAllocationEntry->text().toInt();
m_Arr =(char*) malloc(sizeof(char)*size*m_Size);
memset(m_Arr, 1, size*m_Size);
if (m_Arr == NULL)
{
qDebug() << "Pointer Null" << endl;
}
else
qDebug() << "Pointer NOT null" << endl;
return;
Run Code Online (Sandbox Code Playgroud)
错误是:
ttool.exe中0x0F993FD4(msvcr120d.dll)的第一次机会异常:0xC0000005:访问冲突写入位置0x00000000.
ttool.exe中0x0F993FD4(msvcr120d.dll)的未处理异常:0xC0000005:访问冲突写入位置0x00000000.
我尝试将其作为32位应用程序,但也是64位应用程序,结果是相同的.我也为链接器尝试了/ LARGEADRESSAWARE选项.但是我找不到解决方案.
我知道它可能是关于我使用了多少RAM,但是当我使用3.02GB RAM并尝试分配2GB时,它也会崩溃.
我怎么解决这个问题?
在不使用向量的情况下如何调整数组大小?我要调整大小的数组是一个指向类的指针
class A
{
private:
B * b;
int numOfItems;
int maxNumOfItems;
public:
A();
~A();
resizeMX();
};
A::A()
{
numOfItems = 0;
maxNumOfItems = 20;
b = new B[maxNumOfItems];
for(int i=0;i<maxNumOfItems ;i++)
{
b[i] = 0;
}
}
A::~A()
{
for(int i=0;i<numOfItems;i++)
{
delete [] b;
}
}
void A::resizeMX(const B & obj)
{
bool value=false;
if(numOfItems<=maxNumOfItems && value == false)
{
//assign values to *b in for loop
}
else
{
//resize index of *b
Run Code Online (Sandbox Code Playgroud)
我知道我们应该动态分配新的内存。像这样吗
++maxNumOfItems;
b=new B[maxNumOfItems]; …Run Code Online (Sandbox Code Playgroud) malloc()例如,当我必须指定内存大小时,-ed数组和常规数组之间的区别是什么
char* arr = malloc(50 * sizeof(char))
Run Code Online (Sandbox Code Playgroud)
VS
int arr [50]
Run Code Online (Sandbox Code Playgroud) 我的教科书具有以下用于从链接列表中删除元素的代码.
void remove(double num)
{
Node *cur, *prev;
if(!head){
return;
}
if(head->data == num)
{
cur = head;
head = head->next;
delete cur;
}
else{
cur = head;
while(cur!=NULL && cur->data != num)
{
prev = cur;
cur= cur->next;
}
if(cur)
{
prev->next = cur->next;
delete cur;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我对这段代码有几个问题.首先,如何删除未动态分配的值?为什么这有必要?我没有在任何地方看到新的声明.第二,为什么这段代码是必要的?为什么它需要在if语句中?
if(cur)
{
prev->next = cur->next;
delete cur;
}
Run Code Online (Sandbox Code Playgroud) 我已经定义了struct Node和createNode函数。
typedef struct {
int r, c;
int val;
struct Node* down, *right;
} Node;
typedef Node* NodePointer;
NodePointer createNode(int r,int c,int val) {
NodePointer p = (NodePointer)malloc(sizeof(NodePointer));
if (p != NULL) {
p->r = r;
p->c = c;
p->val = val;
p->down = p->right = NULL;
}
return p;
}
Run Code Online (Sandbox Code Playgroud)
然后当我尝试在主要功能中使用它时
int i = 0;
NodePointer* rows = (NodePointer*)malloc(50*sizeof(NodePointer));
for (i = 0; i < 20; i++) {
rows[i] = createNode(i,i+10,i*i);
}
Run Code Online (Sandbox Code Playgroud)
它引发了运行时错误,但是当我像这样更改for循环时(更改在for循环中-仅执行一次):
for (i = 0; i …Run Code Online (Sandbox Code Playgroud) c pointers memory-management runtime-error dynamic-memory-allocation