我有以下代码-
#include<stdio.h>
#include<assert.h>
#include <stdlib.h>
typedef unsigned char Byte;
typedef struct _big_num {
int nbytes; // size of array
Byte *bytes; /// array of Bytes
} BigNum;
void initBigNum(BigNum *n, int Nbytes)
{
n = malloc(sizeof(BigNum));
assert(n != NULL);
n->bytes = calloc(Nbytes, sizeof(char));
assert(n->bytes != NULL);
if (n -> bytes == NULL) {
fprintf(stderr, "error\n");
}
n->nbytes = Nbytes;
return;
}
int main() {
BigNum num1;
BigNum num2;
initBigNum(&num1, 20);
initBigNum(&num2, 20);
if (num1.bytes == NULL) {
fprintf(stderr, "num1->bytes is NULL\n");
}
if (num2.bytes == NULL) {
fprintf(stderr, "num2->bytes is NULL\n");
}
return 0;
}
我使用gcc -std=c99 -Wall aa.c
进行编译。我正在使用MacOS。
输出为num2->bytes is NULL
。
为什么只有num2部分显示为NULL?为什么不使用num1?我曾尝试在线搜索它,但不确定如何搜索。
对于上下文,我试图为项目设计一个小型的BigInt库。但是,当我尝试在strncpy中使用它时,第二个num2总是抛出seg错误。
我在上面最短的代码中复制了同样的东西。