我用这两条简单的线条得到了一个奇怪的结果
char* reverse = (char*) malloc(sizeof(char)*19);
cout << sizeof(reverse)/sizeof(char) << endl;
Run Code Online (Sandbox Code Playgroud)
无论我放在第一行的数字(在这个例子中,它是19).我总是得到4作为输出.怎么了 ?谢谢.
我正在尝试在C中实现双向链表,我需要使用初始化函数,同时保持一个大小字段.我的代码如下:
typedef struct element{
struct element* next;
struct element* prev;
int value;
}element_t;
typedef struct linkedlist{
element_t* head;
element_t* tail;
int size;
}linkedlist;
void init(linkedlist* list){
list = malloc(sizeof(linkedlist));
list->size = 0;
}
int main(int argc, char** argv){
linkedlist* list;
init(list);
return 0;
Run Code Online (Sandbox Code Playgroud)
当我尝试在init函数中访问list-> size时,我得到正确的值,但是当我尝试从main访问list-> size时,程序返回一个奇怪的,大的负值(可能是十六进制的地址) .
想知道我做错了什么.stdlib包括在内.
我有这个代码:
int * m = (int *)malloc(sizeof(int));
printf("%p %i\n", m, *m);
(*m) = 6;
printf("%p %i\n", m, *m);
free(m);
printf("%p %i\n", m, *m);
Run Code Online (Sandbox Code Playgroud)
我在Linux上运行它.为什么内存地址的值始终为0?
为什么我在Windows上运行它会改变这个值?
我正在写一个C代码来解决欧拉方程.我的代码在集群上工作得很好,但在我的电脑上却没有.似乎是malloc()的一个问题.它无法分配请求的内存并失败.
我如何使它工作?它是否与碎片整理有关?但系统设置显示(0%碎片整理).
在这里只包含一部分malloc()代码.
double **u, **rho_u, **rho,
int Size = 1000;
u = (double**)malloc(Size*sizeof(double*));
for(i=0;i<=Size;i++)
u[i] = (double*)malloc(Size*sizeof(double));
rho_u = (double**)malloc(Size*sizeof(double*));
for(i=0;i<=Size;i++)
rho_u[i] = (double*)malloc(Size*sizeof(double));
Run Code Online (Sandbox Code Playgroud) struct A
{
string st;
};
int main()
{
A *a = (A *)malloc(sizeof(A));
a->st = "print";
cout << a->st;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我使用这种方式并成功编译时,但之后在运行时出现异常。所以,我发现一件事是A *a = new A;代替A *a = (A *)malloc(sizeof(A));。做这种事情哪种方法更好而且不会出错?
运行时内存分配应该怎么做?
struct forcePin {
char _name[512];
};
struct forcePin *_forcePin[500000];
_forcePin[i] = (struct forcePin *) malloc (sizeof (struct forcePin));
Run Code Online (Sandbox Code Playgroud)
我可以知道如下所示的线路在做什么?
_forcePin[i] = (struct forcePin *) malloc (sizeof (struct forcePin));
Run Code Online (Sandbox Code Playgroud)
我不熟悉c,如果你能告诉我如何使这一行也是C++格式的.谢谢
我不断收到以下错误:
*** Error in `./vice': malloc(): memory corruption: 0x08e77530 ***
Aborted (core dumped)
Run Code Online (Sandbox Code Playgroud)
相关代码为:
open_result *
open_file_1_svc(open_args *argp, struct svc_req *rqstp)
{
static open_result result;
int obtained_fd;
int just_read;
int total_read = 0;
int max_bytes_read = 1024;
char *ptr_file;
char *pathName = "MyFiles/"; // strlen = 8
int toReserve;
xdr_free((xdrproc_t)xdr_open_result, (char *)&result);
// Construct full name of the file (in "MyFiles")
toReserve = strlen(argp->fname) + strlen(pathName) + 1; // "\0"
char *fullName = malloc(toReserve*sizeof(char));
fullName = strdup(pathName);
fullName = strcat(fullName, …Run Code Online (Sandbox Code Playgroud) 我需要释放一些在程序中分配的内存.我需要时可以用东西清理内存吗?
#include<stdio.h>
#include<stdlib.h>
#define MAXROW 3
#define MAXCOL 4
int main()
{
int **p, i, j;
p = (int **) malloc(MAXROW * sizeof(int*));
return 0;
}
Run Code Online (Sandbox Code Playgroud) getFree()我在一个类似问题的答案之一中看到它的功能,但是字符串cpy仍然具有第一次给出的相同字符串它运行的次数,即T次.所以,有人请帮忙.
void getFree(char ** ptr) {
if (*ptr != NULL) {
free(*ptr);
}
return;
}
int main() {
int T, j;
scanf("%d", &T);
for (j = 0; j < T; j++) {
char * cpy,
int count = 0, i = 0, x = 0, k = 0;
cpy = (char*)malloc(500 * sizeof(char));
if (getchar() == '\n') {
do {
*(cpy + i) = getchar();
i++;
} while(*(cpy + i - 1) != '\n');
}
getFree(&cpy);
printf("%s", …Run Code Online (Sandbox Code Playgroud) 在IDEONE上执行此代码时:
#include <stdio.h>
#include <stdlib.h>
struct A{
int x;
char c;
};
struct B{
int y;
};
int main(void) {
// your code goes here
struct A* pa = malloc(sizeof(struct B));
printf("%d\n",sizeof(*pa));
pa = malloc(sizeof(int));
printf("%d\n",sizeof(*pa));
pa = malloc(sizeof(char));
printf("%d\n",sizeof(*pa));
pa = malloc(0);
printf("%d\n",sizeof(*pa));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我有:
8
8
8
8
Run Code Online (Sandbox Code Playgroud)
我猜测因为pa是类型struct A *并且struct A是8字节长,然后malloc分配8个字节,因为它应该,但如果是这样,为什么使用sizeof?