Tag: malloc

malloc指针地址在main和其他函数的区别

我有以下问题。 为什么以下示例中的两个指针的地址存在差异? 这是完整的代码: #include #include void *mymalloc(size_t bytes){ void * ptr = malloc(bytes); printf(“Address1 = %zx\n”,(size_t)&ptr); return ptr; } void main (void) { unsigned char *bitv = mymalloc(5); printf(“Address2 = %zx\n”,(size_t)&bitv); } 结果: Address1 = 7ffe150307f0 Address2 = 7ffe15030810

malloc in function – 分割错误

这个程序完美地运作: #include #include #include #define MAX_NUM 2 int tempfunction (char **comments) { char str1[]=”First string\n”; char str2[]=”This is the second string\n”; *(comments+0)=(char *) malloc(strlen(str1)+1); *(comments+1)=(char *) malloc(strlen(str2)+1); strcpy(*(comments+0), str1); strcpy(*(comments+1), str2); return 0; } int main(void) { char **comments; /* This is the section I am talking about */ comments=(char **) malloc(MAX_NUM*sizeof(char *)); if (comments==NULL) […]

在C中重新分配双2D数组

我写了一个函数,它应该为每个输入重新分配数组。 我认为这个function运行良好,但是当我尝试使用数组时,我得到了分段错误。 输入: [1,2] [6,3] [2.5,3.5] 我必须检查用户是否以正确的forms'[‘ number ‘,’ number ‘]’输入输入。 我必须至少有2个条目。 输入的结尾不是新行,而是EOF( CTRL + D或CTRL + Z )。 我的代码: double ** allocation (double ** field, int i) { double x = 0, y = 0; char obr[1], cbr[1], col[1]; while (scanf(“%c%lf%c%lf%c”, &obr, &x, &col, &y, &cbr) == 5) { if (col[0] != ‘,’ || […]

malloc()缓冲区太小

我问这个问题来磨练我的知识。 我在下面写了一份测试代码。 char *ptr1的大小是malloc(1) 。 我在3行上复制5个字。 共有32个字符长度。 输出很顺利。 我浏览了strncat()函数的代码。 它似乎也没有为复制目的分配额外的内存。 我也没有在ptr1 char指针的末尾添加任何空字符。 这怎么能产生正确的结果? 那是对的吗? int main(void) { char *name = “First Set”; char *ptr1; ptr1 = malloc(1); // <<== here the memory is allocated only 1 byte joinWithMe(ptr1, name); // <<== 9 bytes are copied printf("PTR1 : %s\n", ptr1); joinWithMe(ptr1, "-Second Set"); // <<== 11 […]

无法从’void *’转换为’node *’

我的代码存在问题,无法从’void *’转换为’NODE *’ 任何人都可以帮我解决这个问题吗? NODE *list_create(void *data) { NODE *node; if(!(node = malloc(sizeof(NODE)))) return NULL; node->data=data; node->next=NULL; return node; } 我在=符号下面得到了错误。 任何帮助将不胜感激!

如何在这个malloc包装上跟踪TDD测试失败?

我正在尝试使用TDD和C.我想按照TDD方法编写一个简单的malloc包装器。 我试图遵循Bob Martin的TDD三法则 除非要进行失败的unit testing通过,否则不要编写生产代码。 不要写更多的unit testing而不是足以失败,构建失败就是失败。 不要写更多的生产代码,而不是足以通过一个失败的unit testing。 这是我的代码到现在为止: J_STATUS MemAlloc(long Size, void **OutPtr) { J_STATUS ReturnStatus; void *Ptr; Ptr = NULL; if (Size >= 0) { Ptr = malloc(Size); *OutPtr = Ptr; ReturnStatus = SUCCESS; //TODO controllare malloc error } else { ReturnStatus = ERROR; } return ReturnStatus; } 这些是我的测试(我使用的是Unity测试框架): #include “../unity/unity.h” #include […]

OpenMP Segfault

我试图将OpenMP并行化添加到一个工作代码(只是一个for循环),但我无法摆脱分段错误。 问题来自这条线: pos += sprintf(com + pos, “%d “, i); com是一个字符数组,我尝试将它定义为char com[255]或char *com = malloc(255*sizeof(char)) ,在for循环内部和之前。 当我在循环之前定义com时,我将private(com)添加到#pragma omp parallel for directive。 我也尝试初始化它并使用firstprivate 。 ( pos是一个整数,初始化为0 ) 当我不添加-fopenmp一切正常,但是使用-fopenmp它会产生段错误。 我错过了什么?

从C中的文件中读取一行,动态地

#include #include int main() { FILE *input_f; input_f = fopen(“Input.txt”, “r”); //Opens the file in read mode. if (input_f != NULL) { char line[2048]; while( fgets(line, sizeof line, input_f) != NULL ) { //do something } fclose(input_f); //Close the input file. } else { perror(“File couldn’t opened”); //Will print that file couldn’t opened and why. […]

我需要从一个我们不知道矩阵尺寸的文件中读取矩阵

我有这样的结构 struct Data { int ID; double test_sample[2065][1]; int XX_row; int XX_col double **XX; //size=[2065][changing] double **alpha_new; //size=[changing][1] int alpha_new row; int alpha_new_col; double t3; double kernel_par; }person[20]; 我使用fwrite为每个人(20人)写了这个结构到20个文件: fwrite(&person, sizeof( struct Data ), 1,Ptr ); 现在我有20个二进制文件。 每个文件包含一个人的这些变量。 一切都好了。 问题:由于在每个文件中, XX和alpha_new矩阵的维度不同 ,我无法读取文件并将其识别为敲击文件。 (在文件[2065] [8]中,其中一些[2065] [12]) 我需要使用fread (或不同的)读取这些变量并输入到人脸识别程序……有没有办法在文件中单独读取变量或者我是否应该更改写入方法? 我不知道如何在不使用struct的情况下将所有变量矩阵写入一个文件中! 我希望我能在这里解释我的问题,抱歉我的英语不好,我等着你的帮助完成我在c的最后项目; 我正在使用visual studio 2012

释放c – loop中的子串

我正在尝试为结构’ structs ‘的每个成员获取一个子字符串,然后将该子字符串分配给temp_struct的新成员。 我遇到的问题是如何在每次迭代时释放子字符串,由于某种原因代码运行,但是valgrind抛出一个Invalid read of size 1的Invalid read of size 1 ,我假设我正在读取内存块。 我怎么能释放子串呢? 谢谢 #include #include #include struct st_ex { char product[16]; float price; }; struct st_temp { char *prod; }; char *temp = NULL; // from stackoverflow char* substr( const char* source, size_t start, size_t end ) { char* dest = malloc( end […]