相关疑难解决方法(0)

我是否施放了malloc的结果?

这个问题,有人建议意见,我应该不会投的结果malloc,即

int *sieve = malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)

而不是:

int *sieve = (int *) malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?

c malloc casting

2318
推荐指数
27
解决办法
22万
查看次数

C动态增长阵列

我有一个程序读取游戏中实体的"原始"列表,我打算创建一个数组,其中包含一个不确定数量的实体的索引号(int),用于处理各种事物.我想避免使用太多的内存或CPU来保存这些索引......

到目前为止,我使用的一个快速而肮脏的解决方案是在主处理函数(本地焦点)中声明具有最大游戏实体大小的数组,以及另一个整数来跟踪已添加到列表中的数量.这并不令人满意,因为每个列表都拥有3000多个阵列,这并不是那么多,但感觉就像是浪费,因为我可以使用6-7列表的解决方案来实现不同的功能.

我没有找到任何C(不是C++或C#)特定的解决方案来实现这一目标.我可以使用指针,但我有点害怕使用它们(除非它是唯一可能的方式).

数组不会离开本地函数作用域(它们将被传递给函数,然后被丢弃),以防更改内容.

如果指针是唯一的解决方案,我如何跟踪它们以避免泄漏?

c dynamic-arrays

120
推荐指数
4
解决办法
20万
查看次数

为什么我无法重新分配该字符串?

我有一个这样的结构:

typedef struct TEXT {
    char *text;
    struct TEXT *next;
} TEXT;
Run Code Online (Sandbox Code Playgroud)

在某些功能中我有类似的东西:

TEXT *line = (TEXT *) malloc(sizeof(TEXT));
line->text = NULL; // was "\0" before
char current = getchar();
while (current != '\n') {
    AddChar(&(line->text), current); // Was AddChar(line->text, current);
    current = getchar();
}
Run Code Online (Sandbox Code Playgroud)

AddChar 函数是这样的:

void AddChar(char **text, char c) { //was char *text
    *text = (char *) realloc(*text, strlen(*text)+2); //was text = ...
    char char_array[2] = {c, '\0'); 
    strcat(*text, char_array); //was strcat(text, char_array);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,程序崩溃了。

据我了解,事实证明 strlen …

c string struct pointers null-terminated

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

当输入地址指向无效地址时,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
查看次数