10年ほど前に関わった案件にて。けっこう嵌りました。malloc の実装依存部分に起因するエンバグ。 HP-UX ってこういう実装なんだ、と…
ソースがいろいろ変だったので修正。ちなみに型違いが原因ではありません。はまったのは malloc です。
// データベースからとってきたデータを保存する
// dbData は他のところで typedef struct 宣言済みです
dbData* buf = (dbData*)malloc(sizeof(dbData) * rowCount);
if(buf != null) {
int i=0;
for(i=0; i<rowCount; i++) {
buf[i] = ... // <- なぜかここで Segmentation Faultが…?
...
(struct*)malloc(...)が変。sizeof(dbData)も変。(struct* dbData) buf =...も意味がわからない。単にコンパイルエラーを無視していて痛い目にあっただけに見えます。
いろいろ変だったのでソース修正しました
投稿者にウンコマークつけたい
#include <stdlib.h> を忘れて関数宣言なし状態でmalloc使ったら落ちた、というように見えなくもない。
おそらく投稿者が言いたいのはこのへんのことじゃないんですかねえ。
C言語はマニアックなところは非常にマニアックな言語なので、ウンコードの内容が高度すぎて誰も的確なコメントを返せないというwwwww
HPの仕様なんて知らないけど、添字移動するのに、dbDataの型サイズ加味する必要あったのかな? buf[ (dbData * i) ] = …みたいな
↑ヘッダの付け忘れ? ソース修正したせいか、(書かれている部分は)まともなコードになってる(i = 0の重複はともかく)。「malloc の実装」って濡れ衣の予感。
むー、これは解答の回答がほしい。びみょーに普通に動くのになってない?
構造体アライメントの話って、昔の話じゃないと思ってたんだけど。
.Net でもマーシャリングで対応するための機能があって、dll呼び出しす時には普通に考慮しなきゃならんし。
http://msdn.microsoft.com/ja-jp/library/system.runtime.interopservices.structlayoutattribute.pack.aspx
http://www.pinvoke.net/default.aspx/user32/CreateIconFromResource.html
これ、bufの本来の型は何でしょう?それがわからないとすごく気持ちが悪いんですけど。