标签: realloc

C 中重新分配无效指针

这是一项家庭作业,所以我不想发布任何代码,但我对我所遇到的错误感到非常困惑。

目前我有一个已分配空间的数组,并将指针复制到该数组。现在,我可以使用这个数组进行 m​​emcpy 和 memmove,效果很好。

然而,当我用它进行重新分配时,会出现无效指针错误 - 我完全不知道为什么。

有人可以帮忙吗?

c pointers realloc

0
推荐指数
1
解决办法
2万
查看次数

如果将数据移动到不同的块,c ++ realloc函数是否对旧数据块应用删除操作?

该功能可以将存储块移动到新位置,在这种情况下返回新位置.
例如,我有一个指向数组的指针:

int *arr; // somewhere next it initialized, filled with elements and etc
Run Code Online (Sandbox Code Playgroud)

在某个地方我需要:

void* location = realloc(arr, NEW_SIZE);
Run Code Online (Sandbox Code Playgroud)

旧的内存块会发生什么?

如果realloc返回不是数学的指针到arr,我应该使用下一个代码吗?:

delete arr;
arr = (int*)location;
Run Code Online (Sandbox Code Playgroud)

c++ memory-management realloc dynamic-memory-allocation

0
推荐指数
1
解决办法
1267
查看次数

在C++中将数组的内容复制到调整大小的数组

我在这里搜索了很多主题,但他们似乎并没有完全回答我.

我正在尝试用C++做一些动态重新分配od数组.我不能使用STL库中的任何东西,因为我需要在明确禁止STL(向量,...)的作业中使用它.

到目前为止,我已经尝试使用这样的代码进行详细说明:

int * items = new int[3]; //my original array I'm about to resize
int * temp = new int[10];
for (int i = 0; i < 3; i++) temp[i] = items[i];

delete [] items;   //is this necessary to delete?
items = new int [10];
for (int i = 0; i < 10; i++) items[i] = temp[i];
delete [] temp;
Run Code Online (Sandbox Code Playgroud)

这似乎有效,但困扰我的是过多的迭代次数.难道这不可能更聪明吗?显然,我正在使用比这更大的阵列.不幸的是,我必须使用数组.

编辑:当我尝试做items = temp;而不是

for (int i = 0; i < 10; i++) …

c++ arrays realloc

0
推荐指数
1
解决办法
124
查看次数

realloc()似乎影响已经分配的内存

我遇到一个问题,其中的调用realloc似乎修改了另一个字符串的内容,keyfile.

它应该运行一个以null结尾char*(密钥文件),其中包含500个以上的字符.然而,问题是reallocation我在while-loop中执行似乎修改了密钥文件的内容.

我尝试删除动态重新分配,reallocfor使用大小200*sizeof(int)而不是初始化-loop中的指针.问题仍然存在,keyfile字符串在(重新)分配内存期间被修改,我不知道为什么.我通过在mallocrealloc语句之前和之后打印keyfile-string来确认这一点.

注意:密钥文件仅包含字符a-z,没有数字,空格,换行符或大写.只有26个小写字母的文字.

int **getCharMap(const char *keyfile) {

    char *alphabet = "abcdefghijklmnopqrstuvwxyz";
    int **charmap = malloc(26*sizeof(int));

    for (int i = 0; i < 26; i++) {
        charmap[(int) alphabet[i]]    = malloc(sizeof(int)); 
        charmap[(int) alphabet[i]][0] = 0; // place a counter at index 0
    }


    int letter;
    int count = 0;
    unsigned char c = keyfile[count];
    while (c …
Run Code Online (Sandbox Code Playgroud)

c malloc realloc

0
推荐指数
1
解决办法
102
查看次数

realloc(): 无效的下一个大小(核心转储)

我有一个简单的函数,每次我想添加一个字符时都会重新分配缓冲区,它一直工作到我想第 24 次重新分配。然后 realloc(): invalid next size 出现。这是代码:

char * addDataChunk(char * data,char c)
{
    char * p;
    if(data==NULL)
    {
        data=(char*)malloc(sizeof(char)*2);
        data[0]=c;
        data[1]='\0';
        return data;
    }
    else
    {
        if(p = (char*)realloc(data,((strlen(data)+1)*sizeof(char))))
        {
            data = p;
        }
        else
        {
            printf("realloc error\n");
        }
        data[strlen(data)] = c;
        data[strlen(data)+1] = '\0';
        return data;
    }
}
Run Code Online (Sandbox Code Playgroud)

和错误:

*** Error in `./bootstrap': realloc(): invalid next size:     0x0000000000b9f2a0 ***
Aborted (core dumped)
Run Code Online (Sandbox Code Playgroud)

c realloc

0
推荐指数
1
解决办法
2270
查看次数

将int数组在内存中的新空间重新分配为0

我有一个 int 数组,当它看到比现有值更高的 int 值时需要增长,有没有办法调用 realloc() 并设置正在创建的内存中的所有新空间?或者我需要循环遍历内存中所有新的空间并将它们一一设置为0?为了清楚起见,下面的代码。

int main(){
    int i;
    int currentSize = 10;
    int *checkList = malloc(sizeof(int) * currentSize);
    while((i = readInt(fp))){
        if(i > currentSize){
             currentSize = i + 1;
             checklist = realloc(checkList, sizeof(int) * (i + 1));
             //Need to loop through checklist and declare empty mem to 0?
        } 
        if(!checkList[i]) checkList[i]++;
    }

    //should have an array where seen values index in checklist == 1
}
Run Code Online (Sandbox Code Playgroud)

c arrays pointers realloc

0
推荐指数
1
解决办法
901
查看次数

当输入地址指向无效地址时,realloc崩溃

realloc可以返回相同的输入地址或不同的地址.如果它返回一个不同的地址,那么它将在内部解除分配/释放输入内存并将该内容移动到另一个位置并返回该新地址.

请考虑以下情况.

new_ptr = realloc (2000, 10000)  // Lets assume the input address is 2000 

// Lets assume the new_ptr address is 3000
Run Code Online (Sandbox Code Playgroud)

因此,内部realloc将释放指针指向2000的内存并将这些数据移动到新位置3000并返回3000地址.

现在地址2000指向无效.因此,reallocAPI 未将其分配给NULL .

现在,将该无效地址传递给realloc函数.实时可能存在realloc可能获得无效输入地址的更改.

new_ptr = realloc(2000, 10000)
Run Code Online (Sandbox Code Playgroud)

此2000地址无效,因为它已被前一个释放realloc.现在程序崩溃了.

我可以通过以下方式解决此问题.

      if (new_ptr != old_ptr ) {
        old_ptr = NULL;                      
      }
Run Code Online (Sandbox Code Playgroud)

由于old_ptr无效.我将它分配给NULL.请确认我的更正.

c memory-management realloc

0
推荐指数
1
解决办法
212
查看次数

如何在 C 中正确地 malloc 结构体

这是我的完整代码,它看起来可以工作,但效果不是很好。我会接受任何像这样工作的代码。

首先,代码可以工作,但是当我想将第三个名称添加到结构中时,它崩溃了。

还有其他方法可以做到这一点吗?

我需要结构,因为将来我想添加一些其他参数,例如年龄、平均值、性别等。

请帮帮我。

//The student table
typedef struct students {
    char name[50];
} students;

//Global params
int scount = 0;
students *s;

//Basic functions
void addNewStudent();

int main()
{
    int loop = 1;
    char in;
    int ch;
    printf("Willkommen.\n Wahlen Sie bitte von die folgenden Optionen:\n");
    while (loop)
    {
        printf("\t[1] Neue Student eingeben\n");
        printf("\t[9] Programm beenden\n");

        scanf(" %c", &in);
        while ((ch = getchar()) != '\n');
        switch (in)
        {
        case '1':
            addNewStudent();
            break;
        case '9':
            loop = 0;
            break;
        default: …
Run Code Online (Sandbox Code Playgroud)

c malloc struct pointers realloc

0
推荐指数
1
解决办法
708
查看次数

strtok() 与 realloc() 奇怪的行为

我有以下用 C 编写的程序:

    ...
    char *answer = NULL;
    char *pch = strtok(phrase, " "); // phrase is a string with possibly many words
    while (pch) {
        char *tmp = translate_word(pch); // returns a string based on pch
        void *ptr = realloc(answer, sizeof(answer) + sizeof(tmp) + 1000); // allocate space to answer
        if (!ptr) // If realloc fails
             return -1;
        strcat(answer, tmp); // append tmp to answer
        pch = strtok(NULL, " "); // find next word
    }
    ...

Run Code Online (Sandbox Code Playgroud)

问题是 strtok() 表现出奇怪的行为,它返回一个词,该词不存在于 …

c strtok realloc

0
推荐指数
1
解决办法
104
查看次数

C realloc() 无效指针错误即使使用了 malloc

我有一个动态数组实现,我正在为泛型类型工作。我的理解是realloc的无效指针错误通常是由于没有使用malloc分配原始指针引起的,但是,我使用的是malloc。

这是我的 array.h 代码

#include <stdlib.h>
#include <stdint.h>
#include <inttypes.h>

struct array {
    void *elems;
    size_t obj_size;
    size_t size;
    size_t capacity;
};

struct array* new_array(size_t objsize);
int push_back(struct array* a, const void* value); 
Run Code Online (Sandbox Code Playgroud)

数组

#include "array.h"
#include <stdio.h>
#include <string.h>
#define INITIAL_SIZE (1)
#define ARR_AT(a, i) ((void *) ((char *) (a)->elems + (i) * (a)->obj_size))

struct array* new_array(size_t objsize) {
    struct array* a;

    a = malloc(sizeof a + INITIAL_SIZE * objsize);
    if (!a) { return NULL; }

    a->elems = malloc(objsize); …
Run Code Online (Sandbox Code Playgroud)

c realloc dynamic-arrays

0
推荐指数
1
解决办法
56
查看次数