我遇到了这个程序的问题.这非常简单.我需要从我创建的指针中为我的结构赋值,但是我一直遇到分段错误.我有什么想法我做错了:
#include <stdio.h>
#include <stdlib.h>
struct problem37
{
int a;
int b;
int c;
};
int main()
{
printf("Problem 37\n");
//create struct
struct problem37 myStruct;
//create the pointer
int* p;
int* q;
int* r;
*p = 1;
*q = 5;
*r = 8;
//read the data into the struct using the pointers
myStruct.a = *p;
myStruct.b = *q;
myStruct.c = *r;
printf("%d\n", myStruct.a);
printf("%d\n", myStruct.b);
printf("%d\n", myStruct.c);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
你被分配一个值*p,*q和*r,但他们不会被初始化:他们是指向随机内存指针.
您需要初始化它们,或者为它们分配在堆中分配的新值(with malloc):
int *p = (int*) malloc( sizeof(int) );
*p = 1;
Run Code Online (Sandbox Code Playgroud)
或使它们指向已存在的值:
int x;
int *p = &x;
*p = 1; // it's like doing x=1
Run Code Online (Sandbox Code Playgroud)
您的问题是您在随机内存位置写入,因为您没有初始化指针也没有分配内存.
您可以执行以下操作:
int* p = malloc(sizeof(int));
int* q = malloc(sizeof(int));
int* r = malloc(sizeof(int));
Run Code Online (Sandbox Code Playgroud)
显然你需要在使用它们时释放它们:
free(p);
free(q);
free(r);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9749 次 |
| 最近记录: |