我真的很难理解为什么下面的代码不能工作并导致段错误。
Car *newCar;
Car *oldCar;
newCar->engineSize = 1500;
memcpy(newCar, oldCar, sizeof(Car)); 我显然在这里遗漏了一些非常基本的东西,但我不知道它是什么。任何帮助都将不胜感激。
谢谢
发布于 2012-01-10 23:10:10
你需要为它分配内存。
Car* newCar = malloc(sizeof(Car));
Car* oldCar = malloc(sizeof(Car));
...
free(oldCar);
free(newCar);如果你不需要在其他地方使用指针,你可以使用堆栈分配。
Car newCar;
Car oldCar;
newCar.engineSize = 1500;
memcpy(&newCar, &oldCar, sizeof(newCar));发布于 2012-01-10 23:14:08
变量定义,如
Car* newCar;只给你一个指针变量。它所能做的就是保存一个叫做Car的东西的地址。Car的内存大小在这里是未知的,但它可以很容易地比仅仅是指针所需的大几千倍。
在更改实际值之前,您需要为其分配内存,例如,通过将字段分配给engineSize或调用memcpy()
newCar = malloc(sizeof *newCar);
memcpy(newCar, oldCar, sizeof *newCar);请注意,假设这是一个可赋值的struct,通常不需要使用memcpy():
*newCar = *oldCar;这样读起来更整洁,程序员出错的可能性也更小。
另外请注意,engineSize必须在复制完成后设置,否则在复制时会被覆盖:
newCar = malloc(sizeof *newCar);
*newCar = *oldCar;
newCar->engineSize = 1500;发布于 2012-01-10 23:09:45
在对newCar进行写操作之前,需要为它分配一些内存。
Car* newCar = malloc(sizeof(Car));现在你所拥有的只是一个指向内存中某个随机地址的指针,而你试图写入该地址,这会导致未定义的行为和seg错误。
https://stackoverflow.com/questions/8805452
复制相似问题