标签: allocation

为什么大小为 2 的字符数组打印的字符超过 2 个?

为什么某些等级 (Hurup Mutu)列项目打印有标记 (Angka Mutu)列项目(例如B+3,5,其中B+等级3,5标记),即使在我的 中data struct,我已经定义了等级 (Hurup Mutu) Mutu) char 数组只有 2 个字符,但最多可存储 5 个字符。

这并不是每行都会发生,所以我很难找到错误,请帮助我。

您可以在以下输出中看到它,我突出显示了错误的结果:

输出

这是我的 C 代码


#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct data
{
    char nim[13];
    char nama[50];
    float uts, uas, tugas, kuis,total;
    char grade[2], angka[4], status[14];
};

void tampil();
void data(struct data[], int );
char* hurupMutu(int);
char* nilaiMutu(int);
char* status(int);

int main() {

    tampil();

    return 0; …
Run Code Online (Sandbox Code Playgroud)

c arrays allocation scanf char

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

从未使用过的空 Vec 还会被分配吗?

我有一个程序,其中有很多结构类型,其中有 aVec作为字段,但在大多数情况下,Vec永远不会使用(这些类型位于一个单独的库中,该库事先不知道库用户想要哪种类型添加Vecs)。下面的例子说明了这种情况。我想知道空的 Vec 是否b会被分配,或者编译器是否足够聪明知道它不会被使用,因此不需要分配。我怀疑它仍然会被分配,在这种情况下,我会将 a 包装Vec在 an 中Option,以便可以创建 b 而无需分配 a Vec,从而避免许多不必要的分配。

#[derive(Debug)]
struct Foo {
    message: String,
    vec: Vec<String>,
}

fn main() {
    let a = Foo {
        message: "Hello".to_string(),
        vec: Vec::new(),
    };
    dbg!(a.message);
}
Run Code Online (Sandbox Code Playgroud)

allocation vector rust

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

如何测试可用内存限制(C++)?

我必须通过设置构造函数的值来检查PC的可用内存限制.应该动态分配内存.例:

  class matrix{

    int lines;
    int columns;

public:
    matrix(long lin, long col){
        lines=lin;
        columns=col;
       }
};
Run Code Online (Sandbox Code Playgroud)

如何检查哪些值(lin,col)是我记忆的极限?(长型只是一个例子).

///编辑:"通过引入增加的值(矩阵的维度)导致内存分配失败的情况"所以问题是:是否有任何可能性来检查哪些值是最后可以引入的?

c++ memory constructor allocation dynamic

-1
推荐指数
1
解决办法
169
查看次数

将缓冲区 (char*) 传递给 C 中的函数

我将缓冲区 (char*) 传递给 C 中的函数。

在函数内部,我为缓冲区分配内存并附加一个字符串(来自虚拟服务器的响应)。当在函数内部打印时,字符串将显示为从服务器发送的。

当尝试从函数外部读取缓冲区时,我没有得到我需要的结果:

A。// 字符* server_message; // 不起作用,错误:: 分段错误(核心已转储)

b. // char* server_message = calloc((BUFFER_SIZE) + 1, sizeof(char)); // 不起作用,没有生成错误,下面的 server_message 的 printf 打印一个空值:: ==> server_message:: || ||

C。char* server_message = calloc((1000 * BUFFER_SIZE) + 1, sizeof(char)); // 分配超出所需内存的工作:: ==> server_message:: || 2016-03-08 12:20:13 你好 ||

我根本不喜欢选项 c,因为我分配的内存超出了我的需要。出于测试目的,BUFFER_SIZE 当前设置为 10。

这是调用部分::

write_to_server(client_socket, message, server_message);
free(message);
printf("\n\n==> server_message:: || %s ||\n\n", server_message);

if (server_message != NULL)
    free(server_message);
Run Code Online (Sandbox Code Playgroud)

这是 write_to_server 函数代码:

void write_to_server(int file_descriptor, char* message, char* server_message) …
Run Code Online (Sandbox Code Playgroud)

c memory size buffer allocation

-1
推荐指数
1
解决办法
9854
查看次数

按字节删除void*是否安全?

因为我不太了解内存分配,我想知道是否可以安全地删除这样的连续字节(数组)块.

void Free(void* ptr, size_t cbSize)
{
    if (cbSize == 0) return;
    if (ptr == NULL) return;

    for(size_t i = cbSize; i > 0; i--)
    {
        char* p = &((char*)ptr)[i];
        delete p;
    }

    char* p = (char*) (ptr);
    delete p;
}
Run Code Online (Sandbox Code Playgroud)

我在以下情况下尝试过这种方法并没有出错.

int* a = new int[100];
Free(a, 100 * sizeof(int));

int* a = (int*) malloc(100 * sizeof(int));
Free(a, 100 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

c++ allocation

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

C - realloc()函数 - 证明它破坏了数据

看看我用这个简单的代码找到了什么:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *string;

int main(){    

string = (char *) malloc(50*sizeof(char));
strcpy(string, "initi1l wording cont2ining forty-nine ch3r4cters.");
printf("BEFORE: %s\n", string);
string = (char *) realloc(string, 24*sizeof(char));
printf("AFTER: %s\n", string);

system("PAUSE");

return 0;
}
Run Code Online (Sandbox Code Playgroud)

出口是:

BEFORE: initi1l wording cont2ining forty-nine ch3r4cters.
AFTER: initi1l wording cont2inia
Run Code Online (Sandbox Code Playgroud)

请注意字符串末尾的'a'!我不知道它来自哪里,也许在堆中的某个地方.它不是来自原始数据块.最初我使用realloc()与结构数组,它显然以更重要的方式破坏数据.

我该如何解决这个问题?

c memory allocation dynamic realloc

-3
推荐指数
2
解决办法
926
查看次数

如何在linux中使用C分配大型数组

有没有办法分配这个大小的数组:

unsigned long M[2000][900000] ;
Run Code Online (Sandbox Code Playgroud)

这是我运行程序时得到的结果(编译期间没有错误).

在此输入图像描述

Processus arrêté (Process stopped)  
Run Code Online (Sandbox Code Playgroud)

c linux memory allocation

-4
推荐指数
1
解决办法
76
查看次数

标签 统计

allocation ×7

c ×4

memory ×4

c++ ×2

dynamic ×2

arrays ×1

buffer ×1

char ×1

constructor ×1

linux ×1

realloc ×1

rust ×1

scanf ×1

size ×1

vector ×1