为什么某些等级 (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) 我有一个程序,其中有很多结构类型,其中有 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) 我必须通过设置构造函数的值来检查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)是我记忆的极限?(长型只是一个例子).
///编辑:"通过引入增加的值(矩阵的维度)导致内存分配失败的情况"所以问题是:是否有任何可能性来检查哪些值是最后可以引入的?
我将缓冲区 (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) 因为我不太了解内存分配,我想知道是否可以安全地删除这样的连续字节(数组)块.
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) 看看我用这个简单的代码找到了什么:
#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()与结构数组,它显然以更重要的方式破坏数据.
我该如何解决这个问题?
有没有办法分配这个大小的数组:
unsigned long M[2000][900000] ;
Run Code Online (Sandbox Code Playgroud)
这是我运行程序时得到的结果(编译期间没有错误).
Processus arrêté (Process stopped)
Run Code Online (Sandbox Code Playgroud)