編寫C語言遇到的一些問題6

1.相同的c語言程序在windows和在linux調試的時候,若結果不同,很有可能是windows中vs2013中設置的問題,因爲我的linux是64位的,所以下面debug的時候一定要設置x64,因爲這地方默認是win32

2.相同的c語言程序在linux編譯時如果語法沒有問題,而在windows上語法有問題,而通過讀程序,又往往找不到程序的問題出在哪,往往是格式的問題,vs2013默認情況下是:

若出現不明所以的語法錯誤,可嘗試將編碼格式改爲:

3.0xC0000005: 讀取位置 0xFFFFFFFFFFFFFFFF 時發生訪問衝突

這種情況一般是使用了非法內存,具體的原因還得與自己的代碼結合。另外使用malloc時記得free,否則很容易出現內存泄露。

4.當結構體中包含指針成員時,如何分配數組,參考:

 1 //定義如下結構體
 2 typedef struct student
 3 {
 4     int id;
 5     char* name;
 6 } student_t;
 7 
 8 int main(){
 9 
10     //有四種定義形式
11 
12     //一、結構體變量
13     student_t xiaoming; //不需要爲結構體分配內存,但是需要對name分配內存
14     xiaoming.name =(char*)malloc(10);
15     free(xiaoming.name); //釋放成員指針
16 
17     //二、結構體指針
18     student_t *xiaoming=NULL;
19     xiaoming = (student_t*)malloc(sizeof(student_t));
20     xiaoming.name =(char*)malloc(10);
21     free(xiaoming.name); //釋放成員指針
22     free(xiaoming); //釋放指針
23 
24     //三、結構體數組
25     student_t xiaoming[3];
26     for( i = 0; i<3 ; i++ )
27     {
28       xiaoming[i].name = (char*)malloc(10); //初始化
29     }
30     for( i = 0; i<3 ; i++ )
31     {
32       free(xiaoming[i].name); //釋放成員指針
33     }
34     
35     //四、結構體數組(第三種的另一種寫法)
36     student_t *xiaoming=NULL;
37     xiaoming = (student_t*)malloc(sizeof(student_t)*3);
38     for( i = 0; i<3 ; i++ )
39     {
40       xiaoming[i].name = (char*)malloc(10); //初始化
41     }
42     for( i = 0; i<3 ; i++ )
43     {
44       free(xiaoming[i].name); //釋放成員指針
45     }
46     free(xiaoming); //釋放數組
47     
48     return 0;
49 }

參考:https://blog.csdn.net/datian3620/article/details/101761378

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章